matplotlib绘制饼图、柱形图和折线图
获取数据
数据: 标题 name, 作者 author, 评分 grade, 统计有多少人看过 stats
获得评分最高的10个作者
gradeDict 获取每个作者的平均评分,使用 sorted() 函数获得gradeDict中values最高的前10个数据
df = pd.read_csv("clean_data.csv")
gradeDict = {}
countDict = {}
for author, grade in zip(df.author, df.grade):
if author not in countDict.keys():
countDict[author] = 1
gradeDict[author] = grade
else:
countDict[author] = countDict[author] + 1
gradeDict[author] = gradeDict[author] + grade
for key in gradeDict.keys():
gradeDict[key] = gradeDict[key] / countDict[key]
gradeList = sorted(gradeDict.items(), key=lambda x: x[1], reverse=True)[0:10]
countList = sorted(countDict.items(), key=lambda x: x[1], reverse=True)[0:10]
labels = []
values = []
for i in countList:
labels.append(i[0])
values.append(i[1])
labels和values的输出结果
饼图
explode 表示各个扇形之间的间隔,默认值为0
explode = [0.05]
for i in range(1, 10):
explode.append(0.02)
改变中文字体样式,这里设置为SimHei字体,也可以换成其他,否则会乱码
plt.rcParams['font.sans-serif'] = 'SimHei'
绘制饼图,autopct
设置饼图内各个扇形百分比显示格式, %0.2f%% 两位小数百分比。pctdistance
指定 autopct 的位置刻度,默认值为 0.6, 百分比距离圆心的位置,值越小越靠近圆心, labeldistance
标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。也就是改图中作者的位置
plt.savefig
将该图保存为图片,但一定要放在plt.show()前面,否则保存会是空白
plt.pie(values, labels=labels, explode=explode, autopct="%.2f%%", pctdistance=0.7)
plt.title("评分前十名发布的文章个数")
plt.savefig("饼图.png")
plt.show()
柱形图
plt.bar
绘制水平方向的柱形图,plt.barh
绘制垂直方向的柱形图, 可以通过color来改变柱形图颜色或者各个柱形的颜色;设置柱形图宽度,bar() 方法使用 width 设置,barh() 方法使用 height 设置
# plt.barh(range(len(labels)), values, tick_label=labels)
# plt.bar(range(len(labels)), values, tick_label=labels, color="#4CAF50")
plt.bar(range(len(labels)), values, tick_label=labels)
plt.xticks
设置x轴上的标签,默认是有的,这里改变标签的角度为45度, plt.yticks
可以改变y轴标签的刻度,使更美观; plt.text
显示柱形图上的具体数字
plt.xticks(range(len(labels)), labels, rotation=45)
plt.yticks([0, 2, 4, 6, 8, 10])
for x, y in zip(range(len(labels)), values):
plt.text(x, y+0.1, "%d" % y, ha="center")
plt.title("评分前十名发布的文章个数")
plt.xlabel("作者")
plt.ylabel("文章数")
plt.show()
折线图
label=u'111'
图例数据,要加上plt.legend()
才能显示出来;例如 'go-'
是绿色圆点实线
# 模拟数据
labels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
values222 = [5, 7, 9, 7, 5, 3, 4, 8, 6, 3]
plt.plot(labels, values, 'go-', label=u'111')
plt.plot(labels, values222, 'b*-', label=u'222')
plt.xticks(labels)
for x, y in zip(range(len(labels)), values):
plt.text(x, y+0.1, "%.2f" % y, ha="center")
plt.legend() # 让图例生效
plt.show()
戛然而止🎈🎈🎈 溜了溜了
转载自:https://juejin.cn/post/7032461705779085326