可视化分析二

可视化分析二

一.今日内容

编程绘制一个直方图,在图中输出影片ABC的周平均票房(文件中的所有涉及地区周票房总平均),Y轴表示票房收入,单位万元;X轴表示电影名称,电影名称的排列从左至右以ABC为准,要求将输出的直方图保存成图像文件ans0302.jpg,程序源代码保存成ans0302.py,另外,将三部电影各自的票房总收入按自高到低的顺序存入ans0302.dat文件中,要求ans0302.dat中只包含3个浮点型票房数据,以万元为单位,保留6位小数,数据以英文逗号分隔,不换行,文件样例如下:

23.123456,20.654321,18.123456

对本题周票房的说明如下:若某部电影从某月2日开始上映,则从当月2日到8日为其第1周票房,9日至15日为其第2周票房,不满1周按1周计算以此类推。

 

二.内容源码

import datetime
import math
from numpy import long

filmA = "《简单爱》"
filmB = "《少年班》"
filmC = "《冲上云霄》"

def avgpiaofang(film):
    with open(r"C:\Users\liu\Desktop\arg\film_log3.csv", "r", encoding="utf8") as file:
        s = file.readlines()
        for i in s:
            ss = i.split(";")
            if ss[0].startswith(film):
                date1 = ss[1]
                date2 = ss[2]
                piaofang = ss[len(ss) - 2][5:]
                break;
    day1 = datetime.date(*map(int, date1.split('.')))
    day2 = datetime.date(*map(int, date2.split('.')))
    day = (day2 - day1).days
    week = math.ceil(day / 7)
    avg = float(piaofang) / week
    avg = format(avg, '.6f')
    return avg

if __name__ == '__main__':
    a = avgpiaofang(filmA)
    b = avgpiaofang(filmB)
    c = avgpiaofang(filmC)

    with open("ans0302.dat", "w", encoding="utf8") as file:
        file.write(str(a) + "," + str(b) + "," + str(c))

 

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

filmA = "《简单爱》"
filmB = "《少年班》"
filmC = "《冲上云霄》"

lables = [filmA, filmB, filmC]   #x标签
yticks1 = [77.566667, 101.340000, 260.550000]  #y轴数据

width = 0.3

fig, ax = plt.subplots()
rects1 = ax.bar(lables, yticks1, width=0.3, bottom=None, align="center")
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False   #这两行需要手动设置

fig.tight_layout()
plt.show()

 

 

 

 

三.遇到问题

 

 

 

四.解决方案

根据百度,发现原来是中文字符的原因,需要在加上两行代码

plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False   #这两行需要手动设置

 

posted @ 2020-07-31 17:07  晚暮听灯  阅读(99)  评论(0编辑  收藏  举报