零、简介
Matplotlib是一个Python工具箱,用于科学计算的数据可视化。借助它,Python可以绘制如Matlab和Octave多种多样的数据图形。
matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。
它的文档相当完备,并且Gallery页面中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。
Matplotlib具有Matlab的语法、python语言、latex的画图质量(还可以使用内嵌的latex引擎绘制的数学公式)。
一、安装
sudo apt-get install python-matplotlib
二、常用代码
1、画折线图
#coding=utf-8
import numpy as np
import matplotlib.pyplot as plt
# from matplotlib import pyplot as plt
(y1, y2) = np.loadtxt('/tmp/test.txt', delimiter=',', usecols=(0, 3), unpack=True)
N = len(y1)
x = range(N)
x_ticks = range(0, N, 100)
y_ticks = np.arange(min(min(y1), min(y2)), max(max(y1), max(y2)), 0.2)
# 设置图片大小,figsize设置图片大小,dpi设置清晰度
# plt.figure(figsize=(35, 22), dpi=72)
plt.grid()
# plt.grid(axis="x", c='r', ls='--')
# plt.grid(axis='both', linewidth=0.5)
plt.title("Title", fontsize=24)
plt.xlabel('xlabel', fontsize=14)
plt.ylabel('ylabel', fontsize=14)
plt.xticks(x_ticks, rotation=70) # 设置x轴的刻度
# plt.xticks(scale*index, date, rotation=70)
plt.yticks(y_ticks) # 设置y轴的刻度
plt.ylim(0, 1) # plt.ylim((0, 1))
plt.hlines(y, xmin, xmax, color="red") # 画横线
plt.vlines(x, ymin, ymax, color="green") # 画竖线
plt.plot(x, y1, label='y1')
plt.plot(x, y2, label='y2')
plt.legend(loc='upper right', numpoints=4, markerscale=4) # 图例
# p1, = plt.plot(x, y1)
# p2, = plt.plot(x, y2)
# plt.legend([p1, p2], ["y1", "y2"], loc="upper right")
plt.show() # 显示
# plt.savefig('./test.jpg') #保存
# plt.clf()
2、画柱状图
#coding=utf-8
import numpy as np
import matplotlib.pyplot as plt
label = ['a', 'b', 'c', 'd', 'e']
y = [6.5, 8, 2, 9, 1]
x = range(len(y))
plt.xticks(x, label)
plt.bar(x, y, align = 'center', color='steelblue', alpha = 0.8)
for xx, yy in zip(x, y):
plt.text(xx, yy + 0.1, str(yy), ha='center', va='bottom', fontsize=10) # ha,va默认左下,规定文本下边沿中点的坐标的位置
plt.show()
plt.yticks(x, label)
plt.barh(x, y, align = 'center', color='steelblue', alpha = 0.8)
# plt.bar(x, y, width=width, label='label', tick_label="a", fc='#87CEFA')
for xx, yy in zip(x, y):
plt.text(yy + 0.1, xx, str(yy), ha='center')
# plt.text(yy + 0.1, xx, '%.2f' % int(y))
# plt.text(yy + 0.1, xx, '%.2f' %float(y))
plt.show()
3、画直方图
#coding=utf-8
import numpy as np
import matplotlib.pyplot as plt
d = [-1, 0, -1, 1, -2, 0, -1]
# 频数分布
plt.hist(d, np.linspace(-2, 2, 5), alpha=0.8, color='blue')
plt.show()
# 频率分布
plt.hist(d, np.linspace(-2, 2, 5), normed=True)
plt.show()
4、其他
plt.axis([0, 1100, 0, 1100000])
plt.tick_params(axis='both', labelsize=14)
plt.xlim(0, max((index+1)*scale))
plt.ylim(0, max(y)*1.1)
plt.scatter(x4, y4, color='red', marker='+', s=20, edgecolor='red')
plt.savefig("3.png", bbox_inches='tight')
np.histogram(a,bins = [0,20,40,60,80,100])
hist,bins = np.histogram(a,bins = [0,20,40,60,80,100])
# 建立 subplot 网格,高为 2,宽为 1
# 激活第一个 subplot
plt.subplot(2, 1, 1) #两行一列,这是第一个图
plt.axhline(y=0.5, color="r", linestyle=":", label="reference_y")
plt.axvline(x=5, ls="--", c="black", alpha=0.5, label="reference_x")
参考:
官网例子:https://matplotlib.org/gallery/index.html#
Top 50 matplotlib Visualizations – The Master Plots (with full python code)
Matplotlib可视化最有价值的50个图表(附完整Python源代码)(上文翻译-机器之心)
三、重要函数解析
1、plot方法参数详解:
==> 线相关参数
(1)color(或c)关键字用来设置线的颜色,可取值为:
(a)颜色全称或简写
简写 | 全称 | 描述 |
---|---|---|
'b' | 'blue' | 蓝色 |
'g' | 'green' | 绿色 |
'r' | 'red' | 红色 |
'c' | 'cyan' | 青色 |
'm' | 'magenta' | 品红色 |
'y' | 'yellow' | 黄色 |
'k' | 'black' | 黑色 |
'w' | 'white' | 白色 |
(b)#rrggbb 如'#87CEFA'
(c)(r, g, b) 或 (r, g, b, a),其中 r g b a 取均为[0, 1]之间
(d)[0, 1]之间的浮点数的字符串形式,表示灰度值。0表示黑色,1表示白色
(2)linestyle(或ls)关键字用来设置线的样式,可取值为:
简写 | 全称 | 描述 |
---|---|---|
'-' | solid | 实线样式 |
'--' | dashed | 短横线样式 |
'-.' | dashdot | 点划线样式 |
':' | dotted | 虚线样式 |
''或' ' | Non | 无 |
(3)linewidth(或lw)关键字用来设置线的粗细,其值为浮点数。
==> marker相关参数
(4)marker关键字用来设置marker的样式,可取值为:
简写 | 全称 | 描述 |
---|---|---|
'.' | point marker | 点标记 |
',' | pixel marker | 像素标记 |
'o' | circle marker | 圆标记 |
'v' | triangle_down marker | 倒三角标记 |
'^' | triangle_up marker | 正三角标记 |
'<' | triangle_left marker | 左三角标记 |
'>' | triangle_right marker | 右三角标记 |
'1' | tri_down marker | 下箭头标记 |
'2' | tri_up marker | 上箭头标记 |
'3' | tri_left marker | 左箭头标记 |
'4' | tri_right marker | 右箭头标记 |
's' | square marker | 正方形标记 |
'p' | pentagon marker | 五边形标记 |
'*' | star marker | 星形标记 |
'h' | hexagon1 marker | 六边形标记 1 |
'H' | hexagon2 marker | 六边形标记 2 |
'+' | plus marker | 加号标记 |
'x' | x marker | X 标记 |
'D' | diamond marker | 菱形标记 |
'd' | thin_diamond marker | 窄菱形标记 |
'|' | vline marker | 竖直线标记 |
'_' | hline marker | 水平线标记 |
(5)markeredgecolor 或 mec
(6)markeredgewidth 或 mew
(7)markerfacecolor 或 mfc
(8)markerfacecoloralt 或 mfcalt
(9)markersize 或 ms
另外,marker关键字参数可以和color以及linestyle这两个关键字参数合并为一个字符串。
plt.plot(x, y, c='r', ls='--', lw=3)
plt.plot(x, y, c='#526922', ls='-.')
plt.plot(x, y, c=(0.8, 0, 0), linewidth=2)
plt.plot(x, y, color='lightblue', linestyle='dashed')
plt.plot(x, y, marker='o', mec='r', mfc='w')
plt.plot(x, y, marker='*', ms=10)
plt.plot(x, y, 'ro-')
plt.plot(x, y, 'g*:', ms=10)
2、legend方法参数详解:
(1)loc关键字用来设置图例的位置,可取值为数字或字符串:
数字 | 字符串 |
---|---|
0 | 'best' |
1 | 'upper right' |
2 | 'upper left' |
3 | 'lower left' |
4 | 'lower right' |
5 | 'right' |
6 | 'center left' |
7 | 'center right' |
8 | 'lower center' |
9 | 'upper center' |
10 | 'center' |
plt.legend()
plt.legend(loc='upper right')
四、Q&A
报错信息:no display name and no $DISPLAY environment variable
原因:用ssh远程登录linux系统,在terminate中运行python脚本(利用matplotlib生成jpg图片),结果报以上错误
解决:添加matplotlib.use('Agg')这句话,matplotlib设置Agg要放在任何导入的其它相关包前面
举例:
import matplotlib
matplotlib.use('Agg')
import numpy as np
import matplotlib.pyplot as plt
参考:python - Generating a PNG with matplotlib when DISPLAY is undefined - Stack Overflow