可视化分析二
可视化分析二
一.今日内容
编程绘制一个直方图,在图中输出影片A、B、C的周平均票房(文件中的所有涉及地区周票房总平均),Y轴表示票房收入,单位万元;X轴表示电影名称,电影名称的排列从左至右以A、B、C为准,要求将输出的直方图保存成图像文件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 #这两行需要手动设置