资讯专栏INFORMATION COLUMN

Python绘制精美图表之双柱形图

beita / 2447人阅读

摘要:图表是比干巴巴的表格更直观的表达,简洁有力。当我们想关注比数值本身更多的信息像数值的变化对比或异常,图表就非常有用了。把数值转化为图片要依赖第三方库的帮忙,在之中最好的图表库叫。

图表是比干巴巴的表格更直观的表达,简洁、有力。工作中经常遇到的场景是,有一些数值需要定时的监控,比如服务器的连接数、活跃用户数、点击某个按钮的人数,并且通过邮件或者网页展示出来。当我们想关注比数值本身更多的信息(像数值的变化、对比或异常),图表就非常有用了。把数值转化为图片要依赖第三方库的帮忙,在Python之中最好的图表库叫matplotlib。(一直觉得,Python最大的优势就是丰富的第三方库,让你能轻易实现各种需求)

matplotlib,顾名思义就是提供了一整套和matlab相似的API,它的文档相当完备,示例页面提供了上百个图表的入门代码,可以说只有你想不到的,没有它做不到的。

举个稍复杂的例子,小明和小红两个同学各有语文、数学、英语的课程成绩,用一个双柱形图输出各项成绩的对比:

#!/usr/bin/env python
# coding: utf-8

import matplotlib as mpl
mpl.use("Agg")
import matplotlib.pyplot as plt
import numpy as np

# 必须配置中文字体,否则会显示成方块
# 注意所有希望图表显示的中文必须为unicode格式
custom_font = mpl.font_manager.FontProperties(fname="/Library/Fonts/华文细黑.ttf")

font_size = 10 # 字体大小
fig_size = (8, 6) # 图表大小

names = (u"小明", u"小红") # 姓名
subjects = (u"语文", u"数学", u"英语") # 科目
scores = ((65, 90, 75), (85, 80, 90)) # 成绩

# 更新字体大小
mpl.rcParams["font.size"] = font_size
# 更新图表大小
mpl.rcParams["figure.figsize"] = fig_size
# 设置柱形图宽度
bar_width = 0.35

index = np.arange(len(scores[0]))
# 绘制「小明」的成绩
rects1 = plt.bar(index, scores[0], bar_width, color="#0072BC", label=names[0])
# 绘制「小红」的成绩
rects2 = plt.bar(index + bar_width, scores[1], bar_width, color="#ED1C24", label=names[1])
# X轴标题
plt.xticks(index + bar_width, subjects, fontproperties=custom_font)
# Y轴范围
plt.ylim(ymax=100, ymin=0)
# 图表标题
plt.title(u"企鹅班同学成绩对比", fontproperties=custom_font)
# 图例显示在图表下方
plt.legend(loc="upper center", bbox_to_anchor=(0.5, -0.03), fancybox=True, ncol=5, prop=custom_font)

# 添加数据标签
def add_labels(rects):
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x() + rect.get_width() / 2, height, height, ha="center", va="bottom")
        # 柱形图边缘用白色填充,纯粹为了美观
        rect.set_edgecolor("white")

add_labels(rects1)
add_labels(rects2)

# 图表输出到本地
plt.savefig("scores_par.png")

最终图表显示如下:

小结一下,从上面的代码片段可以了解到:matplotlib是一个自由度非常高的图表库,能够实现从颜色、字体等基础属性到图例、网格等图表属性的定制输出

来自:建造者说

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37670.html

相关文章

  • AAChartKit--- 强大、精美、易用的开源iOS图表

    摘要:可选的值有,和。布局类型或即水平布局和垂直布局默认是设定图例在图表区中的水平对齐方式,合法值有,和。垂直位置可以通过选项做进一步设定。 showImg(https://segmentfault.com/img/remote/1460000012009745?w=1240&h=653); showImg(https://segmentfault.com/img/remote/146000...

    eechen 评论0 收藏0
  • AAChartKit--- 强大、精美、易用的开源iOS图表

    摘要:可选的值有,和。布局类型或即水平布局和垂直布局默认是设定图例在图表区中的水平对齐方式,合法值有,和。垂直位置可以通过选项做进一步设定。 showImg(https://segmentfault.com/img/remote/1460000012009745?w=1240&h=653); showImg(https://segmentfault.com/img/remote/146000...

    104828720 评论0 收藏0
  • 怎样用JavaScript和HTML5 Canvas绘制图表

    摘要:饼状图将数据用切割成份的圆来展示。至于半径,我们用宽度的一半与高度的一半的较小值,因为我们不想让饼状图超出。结果看起来如下这样绘制圆环图我们已经看到如何创建饼状图。怎样画洞呢我们可以画一个白色的圆在饼状图上。 showImg(https://segmentfault.com/img/bVObDh?w=850&h=362); 原文:https://code.tutsplus.com/zh...

    doodlewind 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<