matplotlib画图
基础
最简单的图
例子:
import numpy as np #导入numpy包
import matplotlib.pyplot as plt #导入matplotlib包
x = [0, 1] #x轴
y = [0, 1] #y轴
plt.figure() #创建绘图对象
plt.plot(x, y) #画图
plt.show() #显示图像
plt.savefig("easyplot.png") #保存图片
给图加上标签与标题
import numpy as np #导入numpy包
import matplotlib.pyplot as plt #导入matplotlib包
x = [0, 1] #x轴
y = [0, 1] #y轴
plt.figure() #创建绘图对象
plt.xlabel("time(s)") #x轴标签
plt.ylabel("value(m)") #y轴标签
plt.title("A simple plot") #标题
plt.plot(x, y) #画图
plt.show() #显示图像
plt.savefig("easyplot.png") #保存图片
sinx曲线
import numpy as np
import matplotlib.pyplot as plt
#设置x,y轴的数值(y=sinx)
x=np.linspace(0,10,1000)
y=np.sin(x)
#创建绘图对象,figsize参数可以指定绘图对象的宽度和高度,单位为英寸,一英寸=80px
plt.figure(figsize=(8,4))
#在当前绘图对象中画图(x轴,y轴,给所绘制的曲线的名字,画线颜色,画线宽度)
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.xlabel("Time(s)") #X轴的文字
plt.ylabel("Volt") #Y轴的文字
plt.title("PyPlotFirstExample") #图表的标题
plt.ylim(-1.2,1.2) #Y轴的范围
plt.legend() #显示图示
plt.show() #显示图
plt.savefig("sinx.png") #保存图
折线图
import numpy as np
import matplotlib.pyplot as plt
# X轴,Y轴数据
x = [0, 1, 2, 3, 4, 5, 6]
y = [0.3, 0.4, 2, 5, 3, 4.5, 4]
plt.figure(figsize=(8, 4)) #创建绘图对象
plt.plot(x, y, "b--", linewidth=1) #在当前绘图对象绘图(X轴,Y轴,蓝色虚线,线宽度)
plt.xlabel("Time(s)") #X轴标签
plt.ylabel("Volt") #Y轴标签
plt.title("Line plot") #图标题
plt.show() #显示图
plt.savefig("line.png") #保存图
import matplotlib.pyplot as plt
import numpy as np
# 绘制普通图像
x = np.linspace(-1, 1, 50)
y1 = 2 * x + 1
y2 = x**2
plt.figure()
# 在绘制时设置lable, 逗号是必须的
l1, = plt.plot(x, y1, label = 'line')
l2, = plt.plot(x, y2, label = 'parabola', color = 'red', linewidth = 1.0, linestyle = '--')
# 设置坐标轴的取值范围
plt.xlim((-1, 1))
plt.ylim((0, 2))
# 设置坐标轴的lable
plt.xlabel('X axis')
plt.ylabel('Y axis')
# 设置x坐标轴刻度, 原来为0.25, 修改后为0.5
plt.xticks(np.linspace(-1, 1, 5))
# 设置y坐标轴刻度及标签, $$是设置字体
plt.yticks([0, 0.5], ['$minimum$', 'normal'])
# 设置legend
plt.legend(handles = [l1, l2,], labels = ['a', 'b'], loc = 'best')
plt.show()
创建多个图像
import numpy as np
import matplotlib.pyplot as plt
# figure的使用
x = np.linspace(-1, 1, 50)
y1 = 2 * x + 1
# figure 1
plt.figure()
plt.plot(x, y1)
# figure 2
y2 = x**2
plt.figure()
plt.plot(x, y2)
# figure 3,指定figure的编号并指定figure的大小, 指定线的颜色, 宽度和类型
y2 = x**2
plt.figure(num = 5, figsize = (4, 4))
plt.plot(x, y1)
plt.plot(x, y2, color = 'red', linewidth = 1.0, linestyle = '--')
plt.show()
设置坐标轴
import matplotlib.pyplot as plt
import numpy as np
# 绘制普通图像
x = np.linspace(-3, 3, 50)
y = 2 * x + 1
plt.figure()
plt.plot(x, y)
# 将上、右边框去掉
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 设置x轴的位置及数据在坐标轴上的位置
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
# 设置y轴的位置及数据在坐标轴上的位置
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
# 设置坐标轴label的大小,背景色等信息
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(12)
label.set_bbox(dict(facecolor = 'green', edgecolor = 'None', alpha = 0.7))
plt.show()
在图表中显示中文
matplotlib的缺省配置文件中所使用的字体无法正确显示中文。为了让图表能正确显示中文,可以有几种解决方案。
- 在程序中直接指定字体。
- 在程序开头修改配置字典rcParams。
- 修改配置文件。
上面那个link里的修改matplotlibrc方式,我试了好几次都没成功。能work的一个比较简便粗暴的方式(但不知道有没有副作用)是,1.找到字体目录YOURPYTHONHOME\Lib\site-packages\matplotlib\mpl-data\fonts\ttf下的Vera.ttf。这里我们用中文楷体(可以从windows/system32/fonts拷贝过来,对于win8字体文件不是ttf的可以从网上下一个微软雅黑),直接张贴到前面的ttf目录下,然后更名为Vera.ttf。2. 中文字符串用unicode格式,例如:u''测试中文显示'',代码文件编码使用utf-8 加上" # coding = utf-8 "一行。
函数
常用函数
函数 | 功能 |
---|---|
plt.plot | 画图 |
plt.xlabel | x轴标签 |
plt.ylabel | y轴标签 |
plt.title | 标题 |
plt.show | 显示图像 |
plt.savefig | 保存图像 |
plt.figure | 创建一个图像窗口 |
plt.xlim | x轴的范围 |
plt.ylim | y轴的范围 |
np.linspace | 定义刻度 |
plot
用途:
用来画图的,plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。
用法:
plot(x, y, 'bo-') #蓝色圆点实线
plot(x,y2,color='green', marker='o', linestyle='dashed', linewidth=1, markersize=6)
plot(x,y3,color='#900302',marker='+',linestyle='-')
plot(x, y) #plot x, y使用默认的线条样式和颜色
plot(x, y, 'bo') #plot x,y用蓝色圆圈标记
plot(y) #plot y用x作为自变量
plot(y, 'r+') #同上,但是是用红色作为标记
a.plot(x1, y1, 'g^', x2, y2, 'g-')
参数:
class matplotlib.lines.Line2D(xdata, ydata, linewidth, linestyle, color, marker, markersize)
matplotlib.pyplot.plot(*args, **kwargs)
plot([x], y, [fmt], data=None, **kwargs) #单条线:
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs) #多条线一起画
可选参数[fmt]
是一个字符串来定义图的基本属性如:颜色(color),点型(marker),线型(linestyle),
具体形式 fmt = '[color][marker][line]'
fmt接收的是每个属性的单个字母缩写,例如:
plot(x, y, 'bo-') #蓝色圆点实线
若属性用的是全名则不能用fmt参数来组合赋值,应该用关键字参数对单个属性赋值如:
plot(x,y2,color='green', marker='o', linestyle='dashed', linewidth=1, markersize=6)
plot(x,y3,color='#900302',marker='+',linestyle='-')
参数详解:
color
character | color | 颜色 |
---|---|---|
b | blue | 蓝 |
g | green | 绿 |
r | red | 红 |
c | cyan | 青 |
m | magenta | 品红 |
y | yellow | 黄 |
k | black | 黑 |
w | white | 白 |
linestyle
character | 线性 |
---|---|
- | 实线 |
- - | 虚线 |
-. | 点画线 |
: | 点虚线 |
. | 点 |
, | 像素 |
o | 圆形 |
v | 朝下的三角形 |
^ | 朝上的三角形 |
< | 朝左的三角形 |
> | 朝右的三角形 |
| | 垂直线形 |
_ | 水平线形 |
marker
character | 描述 |
---|---|
s | 正方形 |
p | 五角星 |
* | 星型 |
h | 1号六角形 |
H | 2号六角形 |
+ | +号标记 |
x | x号标记 |
D | 钻石形 |
d | 小版钻石形 |
1 | tri_down marker |
2 | tri_up marker |
3 | tri_left marker |
4 | tri_right marker |
legend
用途:
用法:
参数:
subplot
用途:
将多个图片合并显示
用法:
subplot将整个绘图区域等分为 numRows行* numCols列 个子区域,然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1。如果numRows,numCols和plotNum这三个数都小于10的话,可以把它们缩写为一个整数,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的区域中创建一个轴对象。如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。
subplot()返回它所创建的Axes对象,我们可以将它用变量保存起来,然后用sca()交替让它们成为当前Axes对象,并调用plot()在其中绘图。
参数:
subplot(numRows, numCols, plotNum)
例子
import numpy as np
import matplotlib.pyplot as plt
plt.figure(1) # 创建图表1
plt.figure(2) # 创建图表2
ax1 = plt.subplot(211) # 在图表2中创建子图1
ax2 = plt.subplot(212) # 在图表2中创建子图2
x = np.linspace(0, 3, 100)
for i in range(5):
plt.figure(1)# 选择图表1
plt.plot(x, np.exp(i * x / 3))
plt.sca(ax1) #选择图表2的子图1
plt.plot(x, np.sin(i * x))
plt.sca(ax2) #选择图表2的子图2
plt.plot(x, np.cos(i * x))
plt.show()
参考文献
https://blog.csdn.net/quincuntial/article/details/70947363
https://www.cnblogs.com/wei-li/archive/2012/05/23/2506940.html