matplotlib
python-2D绘图使用的套件。
pylab是matplotlib面向对象绘图的一个接口,语法和matlab相近。
from pylab import *
import numpy as np
x = np.linspace(-np.pi,np.pi,256,endpoint=True)
C,S = np.cos(x),np.sin(x)
默认配置由用户自定义:图片大小、分辨率、线宽、颜色、风格、坐标轴、坐标轴和网格属性等。
import numpy as np
import matplotlib.pyplot as plt
plt.plot(x,C)
plt.plot(x,S)
plt.show()
#导入matplotlib所有内容
from pylab import *
#创建一个8*6点的图,设置分辨率为80
figure(figsize=(8,6),dpi=80)
#创建一个新的1*1子图,下面的图样绘制在其中的第一块
subplot(1,1,1)
x = np.linspace(-np.pi,np.pi,256,endpoint=True)
C,S = np.cos(x),np.sin(x)
#绘制余弦曲线,使用蓝色、连续、宽度为1(像素)的线条。
plot(x,C,color="blue",linewidth=1.0,linestyle="-")
#绘制正弦曲线,使用绿色、连续、宽度1(像素)的线条
plot(x,S,color="green",linewidth=1.0,linestyle="-")
#设置横轴上下限
xlim(-4.0,4.0)
#设置横轴记号
xticks(np.linspace(-4,4,9,endpoint=True))
#设置纵轴上下限
ylim(-1.0,1.0)
#设置纵轴记号
yticks(np.linspace(-1,1,5,endpoint=True))
#以分辨率72来保存图片
# savefig("exercice_2.png",dpi=72)
#在屏幕上显示
show()
2. 改变线条的颜色和粗细
#水平方向加长
figure(figsize=(10,6),dpi=80)
#线条加粗
plot(x,C,color="blue",linewidth=2.5,linestyle="-")
plot(x,S,color="red",linewidth=2.5,linestyle="-")
[<matplotlib.lines.Line2D at 0x21597023080>]
3. 设置图片边界
plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(x, S, color="red", linewidth=2.5, linestyle="-")
Xmin ,Xmax = x.min(), x.max()
ymin, ymax = C.min(), C.max()
dx = (Xmax - Xmin) * 0.2
dy = (ymax - ymin) * 0.2
xlim(Xmin - dx, Xmax + dx)
# 扩展x,y轴的坐标范围
ylim(ymin - dy, ymax + dy)
(-1.399984822022966, 1.3999089321377967)
4. 设置记号
plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(x, S, color="red", linewidth=2.5, linestyle="-")
xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi]) #对特定位置的值进行标记。
yticks([-1,0,+1])
([<matplotlib.axis.YTick at 0x21595db7898>,
<matplotlib.axis.YTick at 0x21595db7d68>,
<matplotlib.axis.YTick at 0x215970c13c8>],
[Text(0, 0, ''), Text(0, 0, ''), Text(0, 0, '')])
5. 设置记号标签
plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(x, S, color="red", linewidth=2.5, linestyle="-")
#设置成特征的标签
xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],
[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$+\pi/2$',r'$+\pi$'])
yticks([-1,0,1],
[r'$-1$',r'$0$',r'$+1$'])
([<matplotlib.axis.YTick at 0x2159720a630>,
<matplotlib.axis.YTick at 0x2159720a0b8>,
<matplotlib.axis.YTick at 0x215970abf60>],
[Text(0, -1, '$-1$'), Text(0, 0, '$0$'), Text(0, 1, '$+1$')])
6. 移动脊柱
坐标轴和上面的记号连在一起形成了脊柱,记录数据区域的范围,可以放在任意位置。
每幅图有四个脊柱,为了将脊柱放在图的中间,必须将其中的两条设置为无色。
再调整剩下的两条到合适的位置-数据空间的0点。
x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(x), np.sin(x)
plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(x, S, color="red", linewidth=2.5, linestyle="-")
plt.xlim(x.min()*1.1, x.max()*1.1)
# 设置x轴的格式,真实数值和显示数值结合。显示数值使用latex格式。
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plt.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, 0, +1],
[r'$-1$', r'$0$', r'$+1$'])
ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
7. 添加图例
plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-",label="cosine")
# label参数解释每个图像代表的含义,为legend函数做铺垫。
plt.plot(x, S, color="red", linewidth=2.5, linestyle="-",label="sine")
legend(loc='upper left') #图例所有图像位置。
<matplotlib.legend.Legend at 0x215970188d0>
8. 为一些特殊点做注释
函数annotate标注绘图的某些特征,需要考虑:由参数xy表示的标注位置和xytext的文本位置。两参数都是(x,y)元组。
plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-",label="cosine")
# label参数解释每个图像代表的含义,为legend函数做铺垫。
plt.plot(x, S, color="red", linewidth=2.5, linestyle="-",label="sine")
legend(loc='upper left') #图例所有图像位置。
plt.xlim(x.min()*1.1, x.max()*1.1)
# 设置x轴的格式,真实数值和显示数值结合。显示数值使用latex格式。
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plt.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, 0, +1],
[r'$-1$', r'$0$', r'$+1$'])
ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
t = 2*np.pi/3
# 绘制连接两点的虚线
plot([t,t],[0,np.cos(t)],color = 'blue',linewidth = 2.5,linestyle = "--")
# scatter绘制散点图,[t,],[np.cos(t),]表示x,y坐标,以数组形式表示。
# 50为标量或数组表形状
scatter([t,],[np.cos(t),],50,color='blue')
# xy表示标注位置,xytext表示文本位置,xycoords表示依据轴,arrowprops表示箭头格式
annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
xy = (t,np.sin(t)),xycoords='data',
xytext = (+10,+30),textcoords = 'offset points',fontsize=16,
arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))
plot([t,t],[0,np.sin(t)],color = 'red',linewidth=2.5,linestyle="--")
scatter([t,],[np.sin(t),],50,color='red')
annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
xy = (t,np.cos(t)),xycoords='data',
xytext = (-90,-50),textcoords = 'offset points',fontsize=16,
arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))
Text(-90, -50, '$\\cos(\\frac{2\\pi}{3})=-\\frac{1}{2}$')
9. 精细化修改图像
# label参数解释每个图像代表的含义,为legend函数做铺垫。
# 参数zorder是表征绘图顺序。隐藏在坐标轴下。
plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-", label="cosine",
zorder=-1)
plt.plot(x, S, color="red", linewidth=2.5, linestyle="-", label="sine",
zorder=-2)
legend(loc='upper left') #图例所有图像位置。
plt.xlim(x.min()*1.1, x.max()*1.1)
# 设置x轴的格式,真实数值和显示数值结合。显示数值使用latex格式。
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plt.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, 0, +1],
[r'$-1$', r'$0$', r'$+1$'])
# gca函数获取当前坐标轴。gcf函数获取当前图像。
ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
t = 2*np.pi/3
# 绘制连接两点的虚线
plot([t,t],[0,np.cos(t)],color = 'blue',linewidth = 2.5,linestyle = "--")
# scatter绘制散点图,[t,],[np.cos(t),]表示x,y坐标,以数组形式表示。
#50为标量或数组表形状
scatter([t,],[np.cos(t),],50,color='blue')
# xy表示标注位置,xytext表示文本位置,xycoords表示依据轴,arrowprops表示箭头格式
annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
xy = (t,np.sin(t)),xycoords='data',
xytext = (+10,+30),textcoords = 'offset points',fontsize=16,
arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))
plot([t,t],[0,np.sin(t)],color = 'red',linewidth=2.5,linestyle="--")
scatter([t,],[np.sin(t),],50,color='red')
annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
xy = (t,np.cos(t)),xycoords='data',
xytext = (-90,-50),textcoords = 'offset points',fontsize=16,
arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(16)
label.set_bbox(dict(facecolor='white',edgecolor='None',alpha=0.65))
10. 图像、子图、坐标轴和记号
- 图像:用户界面看到的整个窗口内容。
- 子图:由坐标网格确定的图像。
以下参数是图像的属性:
参数 | 默认值 | 描述 |
---|---|---|
num | 1 | 图像的数量 |
figsize | figure.figsize | 图像的长和宽(英寸) |
dpi | figure.dpi | 分辨率(点/英寸) |
facecolor | figure.facecolor | 绘图区域的背景颜色 |
edgecolor | figure.edgecolor | 绘图区域边缘颜色 |
frameon | True | 是否绘制图像边缘 |
matplotlib中可以使用close函数来关闭图形窗口:
- 不传递参数,关闭当前窗口。
- 传递窗口编号或窗口实例,关闭指定窗口。
- all,关闭所有窗口。
10.1 子图
可以用子图将图样放在均匀的坐标网格。
from pylab import *
# subplot(m,n,p),m,n分别表示在一个图像窗口中有m行n列图像区域组成。
# subplot(m,n,p),p表示现在选定的是第p个图象区域。
subplot(2,1,1)
# xticks(ticks, [labels], **kwargs)函数
# ticks,数组类型,来设置x轴刻度间隔,labels数组类型,设置每个间隔的显示标签。
# **kwargs设置标签字体倾斜度和颜色等外观属性。
xticks([]),yticks([])
# plt.text(x, y, string, weight="bold", color="b")
# 添加图形内容细节的无指向性注释文本。ha参数控制水平对齐方式, va控制垂直对齐方式。
# alpha参数设置透明度。
text(0.5,0.5,'subplot(2,1,1)',ha='center',va='center',size=24,alpha=0.5)
subplot(2,1,2)
xticks([]),yticks([])
text(0.5,0.5,'subplot(2,1,2)',ha='center',va='center',size=24,alpha=0.5)
show()
gridspec功能应用。
from pylab import *
import matplotlib.gridspec as gridspec
# 将图像分为三行三列。
G = gridspec.GridSpec(3,3)
#第一个图占用了第1行和所有列。
axes_1 = subplot(G[0,:])
xticks([]),yticks([])
text(0.5,0.5,'Axes 1',ha='center',va='center',size=24,alpha=0.5)
# 第2个图,占用了第2行和第1列和第2列.
axes_2 = subplot(G[1,:-1])
xticks([]),yticks([])
text(0.5,0.5,'Axes 2',ha='center',va='center',size=24,alpha=0.5)
#第三个图占用了第2行和第3行和第3列。
axes_3 = subplot(G[1:,-1])
xticks([]),yticks([])
text(0.5,0.5,'Axes 3',ha='center',va='center',size=24,alpha=0.5)
# 第四个图占用了第3行和第1列.
axes_4 = subplot(G[-1,0])
xticks([]),yticks([])
text(0.5,0.5,'Axes 4',ha='center',va='center',size=24,alpha=0.5)
# 第5个图占用了第3行和第2列。
axes_1 = subplot(G[-1,-2])
xticks([]),yticks([])
text(0.5,0.5,'Axes 5',ha='center',va='center',size=24,alpha=0.5)
show()
10.2 坐标轴
from pylab import *
# plt.axes((left, bottom, width, height), facecolor=‘w’)
# 使用subplot和axes具有同样的效果。axes生成子图应用很广泛。
axes([0.1,0.1,0.8,0.8])
xticks([]),yticks([])
text(0.6,0.6,'axes([0.1,0.1,0.8,0.8])',ha='center',va='center',size=20,alpha=0.5)
axes([0.2,0.2,0.3,0.3])
xticks([]),yticks([])
text(0.5,0.5,'axes([0.2,0.2,0.3,0.3])',ha='center',va='center',size=16,alpha=0.5)
show()
10.3 记号
11. 各种图的类型
11.1 普通图
from pylab import *
import numpy as np
n = 256
# linspace用来创建等差数列,默认50个数值。
x = np.linspace(-np.pi,np.pi,n,endpoint=True)
y = np.sin(2*x)
plot(x,y+1,color='blue',alpha=1)
plot(x,y-1,color='blue',alpha=1)
show()
- linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
- endpoint=True,即stop对应数值为最后一个数
- retstep If True, return (
samples
,step
), wherestep
is the spacing between samples. - plt.plot(x, y, ls=’-’, lw=2, label=‘xxx’, color=‘g’ ),其中label为标签文本
11.2 散点图
from pylab import *
import numpy as np
n = 1024
# 参数为均值、标准差、shape。
x = np.random.normal(0,1,n)
y = np.random.normal(0,1,n)
scatter(x,y)
show()
scatter(x,y,s=20,c=‘b’,marker=‘o’,cmap=None,norm=None,vmin=None,vmax=None,alpha=None,linewidths=None,verts=None,hold=None,**kwargs)
绘制散点图,x,y是相同长度的数组序列。
参数 | 属性 | 功能 |
---|---|---|
x,y: | 形如shape[n]数组 | 输入数据 |
s: | 标量,形如shape[n,]数组,可选,默认20 | size in points^2 |
c: | 色彩或颜色序列,可选,默认 | 注意C不应是一个单一的RGB数字或RGBA序列,因为不便区分,可以是二维行数组 |
marker: | MarkerStyle,可选,默认’o’ | 参阅markers属性 |
cmap: | Colormap,可选,默认:None | 颜色设置 |
norm | Normalize可选,默认:None | 数据亮度0-1,float数据 |
vmin、vmax: | 标量,可选,默认:None | 亮度设置,若norm实例已使用,则无效 |
alpha: | 标量,可选,默认:None | 0-1 |
linewidths: | 标量或数组,默认:None | … |
颜色参数:
b—blue c—cyan g—green k—black
m—magenta r—red w—white y—yellow
优化图形
from pylab import *
import numpy as np
n = 1024
# 参数为均值、标准差、shape。
x = np.random.normal(0,1,n)
y = np.random.normal(0,1,n)
# atan2() 返回给定的 X 及 Y 坐标值的反正切值。
T = np.arctan2(y,x)
axes([0.025,0.025,0.95,0.95])
scatter(x,y,s=75,c=T,alpha=0.5)
show()
11.3 条形图
from pylab import *
import numpy as np
n = 12
x = np.arange(n)
# random.uniform()随机生成下一个实数,在[x,y]范围内。
y1 = (1-x/float(n))*np.random.uniform(0.5,1.0,n)
y2 = (1-x/float(n))*np.random.uniform(0.5,1.0,n)
# bar(left, height, width, color, align, yerr),柱形图。
bar(x,+y1,facecolor='#9999ff',edgecolor='white')
bar(x,-y2,facecolor='#ff9999',edgecolor='white')
# zip()将迭代对象打包成一个元组。
for X,Y in zip(x,y1):
text(X+0.4,Y+0.05,'%.2f' %Y,ha='center',va='bottom')
ylim(-1.25,+1.25)
show()
bar(left, height, width, color, align, yerr)绘制柱形图。
- align: 柱子对齐方式,有两个可选值:center和edge。center表示每根柱子是根据下标来对齐, edge则表示每根柱子全部以下标为起点,然后显示到下标的右边。如果不指定该参数,默认值是center。
- yerr:每根柱子顶端在纵轴方向的线段。如果指定一个固定值,所有柱子的线段将一直长;如果指定一个带有不同长度值的列表,那么柱子顶部的线段将呈现不同长度。
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
-
range(start, end, step),返回一个list对象,起始值为start,终止值为end,但不含终止值,步长为step。只能创建int型list。
-
arange(start, end, step),与range()类似,但是返回一个array对象。需要引入import numpy as np,并且arange可以使用float型数据。
11.4 等高线图
from pylab import *
import numpy as np
def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
n = 256
# 生成等差数列,[-3,3]范围内。
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
# meshgrid生成网格点坐标矩阵。生成二维矩阵。
X,Y = np.meshgrid(x,y)
# cmap=colormaps,获取图谱:plt.get_cmap(‘xxx’)
contourf(X,Y,f(X,Y),8,alpha=0.75,cmap='jet')
C = contour(X,Y,f(X,Y),8,colors='black')
# 在等高线上增加值标签,inline表征标签值嵌入轮廓中的相对位置。
clabel(C, inline=1, fontsize=10)
show()
X # meshgrid通常使用在数据的矢量化上,可以接受两个一维数组生成两个二维矩阵,对应两个数组中所有的(x,y)对。
array([[-3. , -2.97647059, -2.95294118, ..., 2.95294118,
2.97647059, 3. ],
[-3. , -2.97647059, -2.95294118, ..., 2.95294118,
2.97647059, 3. ],
[-3. , -2.97647059, -2.95294118, ..., 2.95294118,
2.97647059, 3. ],
...,
[-3. , -2.97647059, -2.95294118, ..., 2.95294118,
2.97647059, 3. ],
[-3. , -2.97647059, -2.95294118, ..., 2.95294118,
2.97647059, 3. ],
[-3. , -2.97647059, -2.95294118, ..., 2.95294118,
2.97647059, 3. ]])
x
array([-3. , -2.97647059, -2.95294118, -2.92941176, -2.90588235,
-2.88235294, -2.85882353, -2.83529412, -2.81176471, -2.78823529,
-2.76470588, -2.74117647, -2.71764706, -2.69411765, -2.67058824,
-2.64705882, -2.62352941, -2.6 , -2.57647059, -2.55294118,
-2.52941176, -2.50588235, -2.48235294, -2.45882353, -2.43529412,
-2.41176471, -2.38823529, -2.36470588, -2.34117647, -2.31764706,
-2.29411765, -2.27058824, -2.24705882, -2.22352941, -2.2 ,
-2.17647059, -2.15294118, -2.12941176, -2.10588235, -2.08235294,
-2.05882353, -2.03529412, -2.01176471, -1.98823529, -1.96470588,
-1.94117647, -1.91764706, -1.89411765, -1.87058824, -1.84705882,
-1.82352941, -1.8 , -1.77647059, -1.75294118, -1.72941176,
-1.70588235, -1.68235294, -1.65882353, -1.63529412, -1.61176471,
-1.58823529, -1.56470588, -1.54117647, -1.51764706, -1.49411765,
-1.47058824, -1.44705882, -1.42352941, -1.4 , -1.37647059,
-1.35294118, -1.32941176, -1.30588235, -1.28235294, -1.25882353,
-1.23529412, -1.21176471, -1.18823529, -1.16470588, -1.14117647,
-1.11764706, -1.09411765, -1.07058824, -1.04705882, -1.02352941,
-1. , -0.97647059, -0.95294118, -0.92941176, -0.90588235,
-0.88235294, -0.85882353, -0.83529412, -0.81176471, -0.78823529,
-0.76470588, -0.74117647, -0.71764706, -0.69411765, -0.67058824,
-0.64705882, -0.62352941, -0.6 , -0.57647059, -0.55294118,
-0.52941176, -0.50588235, -0.48235294, -0.45882353, -0.43529412,
-0.41176471, -0.38823529, -0.36470588, -0.34117647, -0.31764706,
-0.29411765, -0.27058824, -0.24705882, -0.22352941, -0.2 ,
-0.17647059, -0.15294118, -0.12941176, -0.10588235, -0.08235294,
-0.05882353, -0.03529412, -0.01176471, 0.01176471, 0.03529412,
0.05882353, 0.08235294, 0.10588235, 0.12941176, 0.15294118,
0.17647059, 0.2 , 0.22352941, 0.24705882, 0.27058824,
0.29411765, 0.31764706, 0.34117647, 0.36470588, 0.38823529,
0.41176471, 0.43529412, 0.45882353, 0.48235294, 0.50588235,
0.52941176, 0.55294118, 0.57647059, 0.6 , 0.62352941,
0.64705882, 0.67058824, 0.69411765, 0.71764706, 0.74117647,
0.76470588, 0.78823529, 0.81176471, 0.83529412, 0.85882353,
0.88235294, 0.90588235, 0.92941176, 0.95294118, 0.97647059,
1. , 1.02352941, 1.04705882, 1.07058824, 1.09411765,
1.11764706, 1.14117647, 1.16470588, 1.18823529, 1.21176471,
1.23529412, 1.25882353, 1.28235294, 1.30588235, 1.32941176,
1.35294118, 1.37647059, 1.4 , 1.42352941, 1.44705882,
1.47058824, 1.49411765, 1.51764706, 1.54117647, 1.56470588,
1.58823529, 1.61176471, 1.63529412, 1.65882353, 1.68235294,
1.70588235, 1.72941176, 1.75294118, 1.77647059, 1.8 ,
1.82352941, 1.84705882, 1.87058824, 1.89411765, 1.91764706,
1.94117647, 1.96470588, 1.98823529, 2.01176471, 2.03529412,
2.05882353, 2.08235294, 2.10588235, 2.12941176, 2.15294118,
2.17647059, 2.2 , 2.22352941, 2.24705882, 2.27058824,
2.29411765, 2.31764706, 2.34117647, 2.36470588, 2.38823529,
2.41176471, 2.43529412, 2.45882353, 2.48235294, 2.50588235,
2.52941176, 2.55294118, 2.57647059, 2.6 , 2.62352941,
2.64705882, 2.67058824, 2.69411765, 2.71764706, 2.74117647,
2.76470588, 2.78823529, 2.81176471, 2.83529412, 2.85882353,
2.88235294, 2.90588235, 2.92941176, 2.95294118, 2.97647059,
3. ])
mgrid():返回多维结构,常见的如2D图形,3D图形。对比np.meshgrid,在处理大数据时速度更快,且能处理多维(np.meshgrid只能处理2维)
ret = np.mgrid[ 第1维,第2维 ,第3维 , …]
返回多值,以多个矩阵的形式返回,
第1返回值为第1维数据在最终结构中的分布,
第2返回值为第2维数据在最终结构中的分布,以此类推。
contour和contourf都是三维等高线图绘制函数,contourf对等高线间的区域进行填充。
其中前两个参数x和y为两个等长一维数组,第三个参数z为二维数组(表示平面点xi,yi映射的函数值)。
coutour([X, Y,] Z,[levels], **kwargs):
11.5 热图(灰度图)
from pylab import *
import numpy as np
def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
n = 10
x = np.linspace(-3,3,4*n)
y = np.linspace(-3,3,3*n)
X,Y = np.meshgrid(x,y)
# imshow函数是灰度图绘制的主要函数。
imshow(f(X,Y))
# 增加边条标签
colorbar(shrink=.92)
show()
imshow(X, cmap=None, norm=None, aspect=None,
interpolation=None, alpha=None, vmin=None, vmax=None,
origin=None, extent=None, shape=None, filternorm=1,
filterrad=4.0, imlim=None, resample=None, url=None, **kwargs)
-
X 可以使类似数组的对象,或者是PIL类型图像,其中,数组对象可选shape为:
(M, N) 单纯的二维数组,元素是标量数据,会通过colormap展示 (M, N, 3) RGB三通道图像,元素值可以是0−1 之间的float或者0−255 之间的int (M, N, 4) RGBA图像,多出来的一维属性,比如是透明度,其元素值和3通道的一样,可以是0−1 之间的float或者0−255之间的int
-
cmap
str 或 matplotlib.colors.Colormap类型,用于将标量数据映射到颜色的Colormap实例或已注册的Colormap名称。
-
norm
在使用cmap之前,用来将二维数组数据归一化到[0,1],默认是线性的,最小值对应0,最大值对应1。
-
interpolation 插值方法,默认’nearest’,可以支持的方法有:
'none' 'nearest' 'bilinear' 'bicubic' 'spline16' 'spline36' 'hanning' 'hamming' 'hermite' 'kaiser' 'quadric' 'catrom' 'gaussian' 'bessel' 'mitchell' 'sinc' 'lanczos'
-
vmin, vmax
当输入的时二维数组标量数据并且没有明确的norm时,vmin和vmax定义colormap覆盖的数据范围,默认情况下,colormap覆盖所提供的值的完整范围数据
-
origin
坐标轴的样式,可选值为upper和lower
利用seaborn生成的热图,cbar=True可以默认生成colorbar。
-
Seaborn的heatmap各参数介绍
seaborn.heatmap(data,vmin=None,vmax=None,cmap=None,center=None,robust=False,annot=None,fmt='2g',annotkws=None,linewidths=0,linecolor='white', cbar=True,cbarkws=None,cbar_ax=None,square=False,ax=None,xticklabels=Ture,yticklabels=Ture,mask=None,**kwargs)
-
data
矩阵数据集,可以使numpy数组,如果是pandas的数据框dataframe,则df的index/column信息会分别对应到heatmap的columns和rows。
-
linewidths:
热力图矩阵之间的间隔大小。 vmax,vmin: 图例中最大值和最小值的显示值,没有该参数时默认不显示。
11.6 饼状图
from pylab import *
import numpy as np
n = 20
# 生成随机的下一个实数,在[0,1]范围内。
Z = np.random.uniform(0,1,n)
pie(Z,explode=Z*0.5)
show()
plt.pie(x, labels= …):
属性 | 说明 | 类型 |
---|---|---|
x | 数据 | list |
labels | 标签 | list |
autopct | 数据标签 | %0.1%%保留一位小数 |
explode | 突出的部分 | list |
shadow | 是否显示阴影 | bool |
pctdistance | 数据标签距离圆心的位置 | 0-1 |
labeldistance | 标签的比例 | float |
startangle | 开始绘图的角度 | float |
radius | 半径长 | 默认是1 |
11.7 量场图
from pylab import *
import numpy as np
n = 8
X,Y = np.mgrid[0:n,0:n]
quiver(X,Y)
show()
11.8 网格
from pylab import *
import numpy as np
ax = axes([0.025,0.025,0.95,0.95])
ax.set_xlim(0,4)
ax.set_ylim(0,3)
ax.xaxis.set_major_locator(MultipleLocator(1.0))
ax.xaxis.set_minor_locator(MultipleLocator(0.1))
ax.yaxis.set_major_locator(MultipleLocator(1.0))
ax.yaxis.set_minor_locator(MultipleLocator(0.1))
ax.grid(which='major', axis='x', linewidth=0.75, linestyle='-', color='0.75')
ax.grid(which='minor', axis='x', linewidth=0.25, linestyle='-', color='0.75')
ax.grid(which='major', axis='y', linewidth=0.75, linestyle='-', color='0.75')
ax.grid(which='minor', axis='y', linewidth=0.25, linestyle='-', color='0.75')
ax.set_xticklabels([])
ax.set_yticklabels([])
show()
11.9 极轴图
from pylab import *
import numpy as np
# axes
axes([0,0,1,1],polar=True)
N = 20
theta = np.arange(0.0,2*np.pi,2*np.pi/N)
radii = 10*np.random.rand(N)
width = np.pi/4*np.random.rand(N)
bars = bar(theta,radii,width=width,bottom=0.0)
for r,bar in zip(radii,bars):
bar.set_facecolor(cm.jet(r/10.0))
bar.set_alpha(0.5)
show()
11.10 3D图
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
x = np.arange(-4,4,0.25)
y = np.arange(-4,4,0.25)
X,Y = np.meshgrid(x,y)
R = np.sqrt(X**2+Y**2)
Z = np.sin(R)
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap='jet')
ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap='jet')
ax.set_zlim(-2,2)
plt.show()
11.11 手稿图
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
eqs = []
eqs.append((r"$W^{3\beta}_{\delta_1 \rho_1 \sigma_2} = U^{3\beta}_{\delta_1 \rho_1} + \frac{1}{8 \pi 2} \int^{\alpha_2}_{\alpha_2} d \alpha^\prime_2 \left[\frac{ U^{2\beta}_{\delta_1 \rho_1} - \alpha^\prime_2U^{1\beta}_{\rho_1 \sigma_2} }{U^{0\beta}_{\rho_1 \sigma_2}}\right]$"))
eqs.append((r"$\frac{d\rho}{d t} + \rho \vec{v}\cdot\nabla\vec{v} = -\nabla p + \mu\nabla^2 \vec{v} + \rho \vec{g}$"))
eqs.append((r"$\int_{-\infty}^\infty e^{-x^2}dx=\sqrt{\pi}$"))
eqs.append((r"$E = mc^2 = \sqrt{{m_0}^2c^4 + p^2c^2}$"))
eqs.append((r"$F_G = G\frac{m_1m_2}{r^2}$"))
plt.axes([0.025,0.025,0.95,0.95])
for i in range(24):
index = np.random.randint(0,len(eqs))
eq = eqs[index]
size = np.random.uniform(12,32)
x,y = np.random.uniform(0,1,2)
alpha = np.random.uniform(0.25,.75)
plt.text(x, y, eq, ha='center', va='center', color="#11557c", alpha=alpha,
transform=plt.gca().transAxes, fontsize=size, clip_on=True)
plt.xticks([]), plt.yticks([])
# savefig('../figures/text_ex.png',dpi=48)
plt.show()