likes
comments
collection
share

matplotlib绘制饼图、柱形图和折线图

作者站长头像
站长
· 阅读数 2

获取数据

数据: 标题 name, 作者 author, 评分 grade, 统计有多少人看过 stats

获得评分最高的10个作者

gradeDict 获取每个作者的平均评分,使用 sorted() 函数获得gradeDict中values最高的前10个数据

matplotlib绘制饼图、柱形图和折线图

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的输出结果

matplotlib绘制饼图、柱形图和折线图

饼图

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()

matplotlib绘制饼图、柱形图和折线图

柱形图

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()

matplotlib绘制饼图、柱形图和折线图

折线图

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()

matplotlib绘制饼图、柱形图和折线图

戛然而止🎈🎈🎈 溜了溜了