图表是比干巴巴的表格更直观的表达,简洁、有力。工作中经常遇到的场景是,有一些数值需要定时的监控,比如服务器的连接数、活跃用户数、点击某个按钮的人数,并且通过邮件或者网页展示出来。当我们想关注比数值本身更多的信息(像数值的变化、对比或异常),图表就非常有用了。把数值转化为图片要依赖第三方库的帮忙,在Python之中最好的图表库叫matplotlib。(一直觉得,Python最大的优势就是丰富的第三方库,让你能轻易实现各种需求)
matplotlib,顾名思义就是提供了一整套和matlab相似的API,它的文档相当完备,示例页面提供了上百个图表的入门代码,可以说只有你想不到的,没有它做不到的。
举个稍复杂的例子,小明和小红两个同学各有语文、数学、英语的课程成绩,用一个双柱形图输出各项成绩的对比:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#!/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是一个*度非常高的图表库,能够实现从颜色、字体等基础属性到图例、网格等图表属性的定制输出。
以上就是本文关于python绘制双柱形图代码实例的全部内容,希望对大家有所帮助。如有不足之处就,欢迎留言指出。感谢朋友们对本站的支持!
原文链接:http://www.open-open.com/code/view/1449667454441