使用matplotlib绘图

零、简介

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.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.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') # 图例
# 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') #保存

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)

参考:

官网例子:https://matplotlib.org/gallery/index.html#

Matplotlib 中文文档(例子)

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

参考:https://stackoverflow.com/questions/2801882/generating-a-png-with-matplotlib-when-display-is-undefined

猜你喜欢

转载自blog.csdn.net/A_L_A_N/article/details/95184355