使用Python 程序来生成可视化图像,具有明确的表达性。Matplotlib 里的常用类的包含关系为 Figure -> Axes -> (Line2D, Text, etc.)一个Figure对象可以包含多个子图(Axes),在matplotlib中用Axes对象表示一个绘图区域,可以理解为子图。
demo1:曲线图和直线图
#!/usr/bin/env python#-*- coding: utf-8 -*-
importnumpy as npimportmatplotlib.pyplot as plt
t= np.arange(0.0, 1.01, 0.01)
s= np.sin(2*2*np.pi*t)
plt.fill(t, s*np.exp(-5*t), 'r')
plt.grid(True)#保存为PDF格式,也可保存为PNG等图形格式
plt.savefig('test.png')
plt.show()
View Code
importnumpy as npimportmatplotlib.pyplot as plt
x=np.linspace(0,10,1000)
y=np.sin(x)
z=np.cos(x**2)
plt.figure(figsize=(8,4))
plt.plot(x,y,label='$sin(x)$',color='red',linewidth=2)
plt.plot(x,z,'g--',label='$cos(x^2)$',lw=3)
plt.xlabel('Time(s)')
plt.ylabel('volt')
plt.title('First python firgure')
plt.ylim(-1.2,1.2)
plt.legend()
plt.savefig("test.png")
plt.show()
View Code
importnumpy as npimportmatplotlib.pyplot as plt#A class that will downsample the data and recompute when zoomed.
classDataDisplayDownsampler(object):def __init__(self, xdata, ydata):
self.origYData=ydata
self.origXData=xdata
self.ratio= 5self.delta= xdata[-1] -xdata[0]defdownsample(self, xstart, xend):#Very simple downsampling that takes the points within the range
#and picks every Nth point
mask = (self.origXData > xstart) & (self.origXData
xdata=self.origXData[mask]
xdata=xdata[::self.ratio]
ydata=self.origYData[mask]
ydata=ydata[::self.ratio]returnxdata, ydatadefupdate(self, ax):#Update the line
lims =ax.viewLimif np.abs(lims.width - self.delta) > 1e-8:
self.delta=lims.width
xstart, xend=lims.intervalx
self.line.set_data(*self.downsample(xstart, xend))
ax.figure.canvas.draw_idle()#Create a signal
xdata = np.linspace(16, 365, 365-16)
ydata= np.sin(2*np.pi*xdata/153) + np.cos(2*np.pi*xdata/127)
d=DataDisplayDownsampler(xdata, ydata)
fig, ax=plt.subplots()#Hook up the line
d.line, = ax.plot(xdata, ydata, 'o-')
ax.set_autoscale_on(False)#Otherwise, infinite loop
#Connect for changing the view limits
ax.callbacks.connect('xlim_changed', d.update)
plt.savefig("test.png")
plt.show()
View Code
含有鼠标线
importnumpy as npimportmatplotlib.pyplot as pltfrom matplotlib.widgets importCursor
t= np.arange(0.0, 2.0, 0.01)
s1= np.sin(2 * np.pi *t)
plt.plot(t, s1)
cursor= Cursor(plt.gca(), horizOn=True, color='r', lw=1)
plt.savefig("test.png")
plt.show()
View Code
importnumpy as npimportmatplotlib.pyplot as pltfrom matplotlib.widgets importMultiCursor
t= np.arange(0.0, 2.0, 0.01)
s1= np.sin(2*np.pi*t)
s2= np.sin(4*np.pi*t)
fig=plt.figure()
ax1= fig.add_subplot(211)
ax1.plot(t, s1)
ax2= fig.add_subplot(212, sharex=ax1)
ax2.plot(t, s2)
multi= MultiCursor(fig.canvas, (ax1, ax2), color='r', lw=1)
plt.show()
View Code
#!/usr/bin/env python#-*- coding: utf-8 -*-
importnumpy as npimportmatplotlib.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 xrange(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.savefig("test.png")
plt.show()
View Code
#-*- coding: utf-8 -*-
importnumpy as npimportmatplotlib.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 xrange(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()
View Code
含有公式:
importnumpy as npimportmatplotlib.pyplot as plt
t= np.arange(0.0, 2.0, 0.01)
s= np.sin(2*np.pi*t)
plt.plot(t,s)
plt.title(r'$\alpha_i > \beta_i$', fontsize=20)
plt.text(1, -0.6, r'$\sum_{i=0}^\infty x_i$', fontsize=20)
plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$',
fontsize=20)
plt.xlabel('time (s)')
plt.ylabel('volts (mV)')
plt.show()
View Code
##################################-*- coding: utf-8 -*-#File name :5.py#Author :kangkangliang#File desc :#Mail :liangkangkang@yahoo.com#Create time :2017-06-11##################################!/usr/bin/env python
importosimportnumpy as npimportmatplotlib.pyplot as pltimportsys
x= [1,2,3,4,5,6,7,8,9,10]
y= [1,2,3,4,5,6,7,8,9,10]
plt.plot(x,y)
plt.text(2, 8, r"$ \mu \alpha \tau \pi \lambda \omega \tau \lambda \iota \beta $",fontsize=20);
plt.text(2, 6, r"$ \lim_{x \rightarrow 0} \frac{1}{x} $",fontsize=20);
plt.text(2, 4, r"$ a \ \leq \ b \ \leq \ c \ \Rightarrow \ a \ \leq \ c$",fontsize=20);
plt.text(2, 2, r"$ \sum_{i=1}^{\infty}\ x_i^2$",fontsize=20);
plt.text(4, 8, r"$ \sin(0) = \cos(\frac{\pi}{2})$",fontsize=20);
plt.text(4, 6, r"$ \sqrt[3]{x} = \sqrt{y}$",fontsize=20);
plt.text(4, 4, r"$ \neg (a \wedge b) \Leftrightarrow \neg a \vee \neg b$",fontsize=20);
plt.text(4, 2, r"$ \int_a^b f(x)dx$",fontsize=20);
plt.xlabel('time (s)')
plt.ylabel('volts (mV)')
plt.show()
View Code
importnumpy as npimportpylab as pl
data= np.loadtxt('testdata.txt')#plot the first column as x, and second column as y
pl.plot(data[:,0], data[:,1], 'ro')
pl.xlabel('x')
pl.ylabel('y')
pl.xlim(0.0, 10.)
pl.show()
View Code
importnumpy as npimportmatplotlib.pyplot as plt
x1= [1, 2, 3, 4, 5]#Make x, y arrays for each graph
y1 = [1, 4, 9, 16, 25]
x2= [1, 2, 4, 6, 8]
y2= [2, 4, 8, 12, 16]
pltot1= plt.plot(x1, y1, 'r')#use pylab to plot x and y : Give your plots names
pltot2 = plt.plot(x2, y2, 'go')
plt.title('Plot of y vs. x')#give plot a title
plt.xlabel('x axis')#make axis labels
plt.ylabel('y axis')
plt.xlim(0.0, 9.0)#set axis limits
plt.ylim(0.0, 30.)#plt.legend([plot1, plot2], ('red line', 'green circles'), 'best', numpoints=1)# make legend
plt.legend(('red line','green circles'))
plt.show()#show the plot on the screen
View Code
importnumpy as npimportpylab as plt
x1= [1, 2, 3, 4, 5]#Make x, y arrays for each graph
y1 = [1, 4, 9, 16, 25]
x2= [1, 2, 4, 6, 8]
y2= [2, 4, 8, 12, 16]
plt.plot(x1, y1,'r')#use pylab to plot x and y
plt.plot(x2, y2, 'g')
plt.title('Plot of y vs. x')#give plot a title
plt.xlabel('x axis')#make axis labels
plt.ylabel('y axis')
plt.xlim(0.0, 9.0)#set axis limits
plt.ylim(0.0, 30.)
plt.show()#show the plot on the screen
View Code
##################################-*- coding: utf-8 -*-#File name :demo.py#Author :kangkangliang#File desc :#Mail :liangkangkang@yahoo.com#Create time :2017-06-11##################################!/usr/bin/env python
importosimportnumpy as npimportmatplotlib.pyplot as pltimportsys
x= np.arange(0.0, 10.0, 1.0)
y1= x*2y2= x + 2y3= x*3
#color rgbyck#b blue#r green#r red#c cyan#m magenta#y yellow#k black#white#散点图
plt.plot(x,y1,'or')#折线图
plt.plot(x,y2)#虚线
plt.plot(x,y3,'--')
plt.show()
View Code
importmatplotlib.pyplot as plt
X1= range(0, 50)
Y1= [num**2 for num in X1] #y = x^2
X2 = [0, 1]
Y2= [0, 1] #y = x
Fig = plt.figure(figsize=(8,4)) #Create a `figure' instance
Ax = Fig.add_subplot(111) #Create a `axes' instance in the figure
Ax.plot(X1, Y1, X2, Y2) #Create a Line2D instance in the axes
Fig.show()
Fig.savefig("test.png"
View Code
importnumpy as npimportpylab as pl
x= [1, 2, 3, 4, 5]#Make an array of x values
y = [1, 4, 9, 16, 25]#Make an array of y values for each x value
pl.plot(x, y)#use pylab to plot x and y
pl.show()#show the plot on the screen
View Code
#!/usr/bin/env python
importmatplotlib.pyplot as plt
plt.plot([10, 20, 30])
plt.xlabel('times')
plt.ylabel('numbers')
plt.savefig("test.png")
plt.show()
View Code
importmatplotlib.pyplot as pltfrom matplotlib.font_manager importFontProperties
font=FontProperties()
plt.figure()
plt.title('this is title')
plt.xlabel('x label')
plt.ylabel('y label')
plt.axis([0,25, 0, 25])
plt.grid(True)
x= [[1],[2],[3],[4],[5],[6]]
y= [[1],[2.1],[2.9],[4.2],[5.1],[5.8]]
plt.plot(x, y,'k.')
plt.savefig('test.png')
plt.show()
View Code
from math importpifrom numpy importcos, sinfrom matplotlib importpyplot as pltif __name__ == '__main__':'''''plot data margin'''angles_circle= [i*pi/180 for i in range(0,360)] #i先转换成double
#angles_circle = [i/np.pi for i in np.arange(0,360)] # <=>
#angles_circle = [i/180*pi for i in np.arange(0,360)] X
x =cos(angles_circle)
y=sin(angles_circle)
plt.plot(x, y,'r')
plt.axis('equal')
plt.axis('scaled')
plt.savefig("test.png")
plt.show()
View Code
importnumpy as npimportmatplotlib.pyplot as plt
N= 50x=np.random.rand(N)
y=np.random.rand(N)
area= np.pi * (15 * np.random.rand(N))**2 #0 to 15 point radiuses
color = 2 * np.pi *np.random.rand(N)
plt.scatter(x, y, s=area, c=color, alpha=0.5, cmap=plt.cm.hsv)
plt.savefig("test.png")
plt.show()
View Code
多个图:
importnumpy as npimportmatplotlib.pyplot as plt
t= np.arange(-1, 2, .01)
s= np.sin(2 * np.pi *t)
plt.plot(t,s)#draw a thick red hline at y=0 that spans the xrange
l = plt.axhline(linewidth=4, color='r')
plt.axis([-1, 2, -1, 2])
plt.show()
plt.close()#draw a default hline at y=1 that spans the xrange
plt.plot(t,s)
l= plt.axhline(y=1, color='b')
plt.axis([-1, 2, -1, 2])
plt.show()
plt.close()#draw a thick blue vline at x=0 that spans the upper quadrant of the yrange
plt.plot(t,s)
l= plt.axvline(x=0, ymin=0, linewidth=4, color='b')
plt.axis([-1, 2, -1, 2])
plt.show()
plt.close()#draw a default hline at y=.5 that spans the the middle half of the axes
plt.plot(t,s)
l= plt.axhline(y=.5, xmin=0.25, xmax=0.75)
plt.axis([-1, 2, -1, 2])
plt.show()
plt.close()
plt.plot(t,s)
p= plt.axhspan(0.25, 0.75, facecolor='0.5', alpha=0.5)
p= plt.axvspan(1.25, 1.55, facecolor='g', alpha=0.5)
plt.axis([-1, 2, -1, 2])#plt.show()#plt.savefig('test.png')
View Code
对数图:
importnumpy as npimportmatplotlib.pyplot as plt
w= np.linspace(0.1, 1000, 1000)
p= np.abs(1/(1+0.1j*w))
plt.subplot(221)
plt.plot(w, p, linewidth=2)
plt.ylim(0,1.5)
plt.subplot(222)
plt.semilogx(w, p, linewidth=2)
plt.ylim(0,1.5)
plt.subplot(223)
plt.semilogy(w, p, linewidth=2)
plt.ylim(0,1.5)
plt.subplot(224)
plt.loglog(w, p, linewidth=2)
plt.ylim(0,1.5)
plt.savefig("test.png")
plt.show()
View Code
importmatplotlib.pyplot as pltimportmatplotlib.pylab as pylabimportscipy.ioimportnumpy as np#params={
#'axes.labelsize': '35',
#'xtick.labelsize':'27',
#'ytick.labelsize':'27',
#'lines.linewidth':2 ,
#'legend.fontsize': '27',
#'figure.figsize' : '12, 9' # set figure size#}#pylab.rcParams.update(params) #set figure parameter
line_styles=['ro-','b^-','gs-','ro--','b^--','gs--'] #set line style
#We give the coordinate date directly to give an example.
x1 = [-20,-15,-10,-5,0,0,5,10,15,20]
y1= [0,0.04,0.1,0.21,0.39,0.74,0.78,0.80,0.82,0.85]
y2= [0,0.014,0.03,0.16,0.37,0.78,0.81,0.83,0.86,0.92]
y3= [0,0.001,0.02,0.14,0.34,0.77,0.82,0.85,0.90,0.96]
y4= [0,0,0.02,0.12,0.32,0.77,0.83,0.87,0.93,0.98]
y5= [0,0,0.02,0.11,0.32,0.77,0.82,0.90,0.95,1]
plt.plot(x1,y1,'bo-',label='m=2, p=10%',markersize=20) #in 'bo-', b is blue, o is O marker, - is solid line and so on
plt.plot(x1,y2,'gv-',label='m=4, p=10%',markersize=20)
plt.plot(x1,y3,'ys-',label='m=6, p=10%',markersize=20)
plt.plot(x1,y4,'ch-',label='m=8, p=10%',markersize=20)
plt.plot(x1,y5,'mD-',label='m=10, p=10%',markersize=20)
fig1= plt.figure(1)
axes= plt.subplot(111)#axes = plt.gca()
axes.set_yticks([0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0])
axes.grid(True)#add grid
plt.legend(loc="lower right") #set legend location
plt.ylabel('Percentage') #set ystick label
plt.xlabel('Difference') #set xstck label
plt.savefig('test.png',dpi = 1000,bbox_inches='tight')
plt.show()
View Code
demo2:饼图
#!/usr/bin/env python#-*- coding: utf-8 -*-
from pylab import *
#make a square figure and axes
figure(1, figsize=(6,6))
ax= axes([0.1, 0.1, 0.8, 0.8])
labels= 'Frogs', 'Hogs', 'Dogs', 'Logs'fracs= [15,30,45, 10]
explode=(0, 0.05, 0, 0)
pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
title('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5})
savefig('pie.png')
show()
View Code
importmatplotlib.pyplot as pltfor idx,color in enumerate('rgbyck'):
plt.subplot(321+idx,axisbg=color)
plt.savefig("test.png")
plt.show()
View Code
demo3:柱状图
importscipy.ioimportnumpy as npimportmatplotlib.pylab as pylabimportmatplotlib.pyplot as pltimportmatplotlib.ticker as mtick#params={
#'axes.labelsize': '35',
#'xtick.labelsize':'27',
#'ytick.labelsize':'27',
#'lines.linewidth':2 ,
#'legend.fontsize': '27',
#'figure.figsize' : '24, 9'#}#pylab.rcParams.update(params)
y1= [9.79,7.25,7.24,4.78,4.20]
y2= [5.88,4.55,4.25,3.78,3.92]
y3= [4.69,4.04,3.84,3.85,4.0]
y4= [4.45,3.96,3.82,3.80,3.79]
y5= [3.82,3.89,3.89,3.78,3.77]
ind= np.arange(5) #the x locations for the groups
width = 0.15plt.bar(ind,y1,width,color= 'blue',label = 'm=2')
plt.bar(ind+width,y2,width,color = 'g',label = 'm=4') #ind+width adjusts the left start location of the bar.
plt.bar(ind+2*width,y3,width,color = 'c',label = 'm=6')
plt.bar(ind+3*width,y4,width,color = 'r',label = 'm=8')
plt.bar(ind+4*width,y5,width,color = 'm',label = 'm=10')
plt.xticks(np.arange(5) + 2.5*width, ('10%','15%','20%','25%','30%'))
plt.xlabel('Sample percentage')
plt.ylabel('Error rate')
fmt= '%.0f%%' #Format you want the ticks, e.g. '40%'
xticks =mtick.FormatStrFormatter(fmt)#Set the formatter
axes = plt.gca() #get current axes
axes.yaxis.set_major_formatter(xticks) #set % format to ystick.
axes.grid(True)
plt.legend(loc="upper right")
plt.savefig('test.png', format='png',dpi = 1000,bbox_inches='tight')
plt.show()
View Code
importnumpy as npimportmatplotlib.pyplot as plt#make an array of random numbers with a gaussian distribution with#mean = 5.0#rms = 3.0#number of points = 1000
data = np.random.normal(5.0, 3.0, 1000)#make a histogram of the data array
plt.hist(data)#make plot labels
plt.xlabel('data')
plt.show()
View Code
去掉中间的黑线
#-*- coding: utf-8 -*-
importnumpy as npimportmatplotlib.pyplot as plt#make an array of random numbers with a gaussian distribution with#mean = 5.0#rms = 3.0#number of points = 1000
data = np.random.normal(5.0, 3.0, 1000)#make a histogram of the data array#pl.hist(data)
plt.hist(data,histtype='stepfilled')#make plot labels
plt.xlabel('data')
plt.show()
View Code
#-*- coding: utf-8 -*-
importnumpy as npimportpylab as pl#make an array of random numbers with a gaussian distribution with#mean = 5.0#rms = 3.0#number of points = 1000
data = np.random.normal(5.0, 3.0, 1000)#make a histogram of the data array
bins = np.arange(-5., 16., 1.) #浮点数版本的range
pl.hist(data, bins, histtype='stepfilled')#pl.hist(data)#make plot labels
pl.xlabel('data')
pl.show()
View Code
demo4:网状图
importnetworkx as nximportpylab as plt
g=nx.Graph()
g.add_edge(1,2,weight = 4)
g.add_edge(1,3,weight = 7)
g.add_edge(1,4,weight = 8)
g.add_edge(1,5,weight = 3)
g.add_edge(1,9,weight = 3)
g.add_edge(1,6,weight = 6)
g.add_edge(6,7,weight = 7)
g.add_edge(6,8,weight = 7)
g.add_edge(6,9,weight = 6)
g.add_edge(9,10,weight = 7)
g.add_edge(9,11,weight = 6)
fixed_pos= {1:(1,1),2:(0.7,2.2),3:(0,1.8),4:(1.6,2.3),5:(2,0.8),6:(-0.6,-0.6),7:(-1.3,0.8), 8:(-1.5,-1), 9:(0.5,-1.5), 10:(1.7,-0.8), 11:(1.5,-2.3)} #set fixed layout location
#pos=nx.spring_layout(g) # or you can use other layout set in the module
nx.draw_networkx_nodes(g,pos = fixed_pos,nodelist=[1,2,3,4,5],
node_color= 'g',node_size = 600)
nx.draw_networkx_edges(g,pos= fixed_pos,edgelist=[(1,2),(1,3),(1,4),(1,5),(1,9)],edge_color='g',width = [4.0,4.0,4.0,4.0,4.0],label = [1,2,3,4,5],node_size = 600)
nx.draw_networkx_nodes(g,pos= fixed_pos,nodelist=[6,7,8],
node_color= 'r',node_size = 600)
nx.draw_networkx_edges(g,pos= fixed_pos,edgelist=[(6,7),(6,8),(1,6)],width = [4.0,4.0,4.0],edge_color='r',node_size = 600)
nx.draw_networkx_nodes(g,pos= fixed_pos,nodelist=[9,10,11],
node_color= 'b',node_size = 600)
nx.draw_networkx_edges(g,pos= fixed_pos,edgelist=[(6,9),(9,10),(9,11)],width = [4.0,4.0,4.0],edge_color='b',node_size = 600)
plt.text(fixed_pos[1][0],fixed_pos[1][1]+0.2, s = '1',fontsize = 40)
plt.text(fixed_pos[2][0],fixed_pos[2][1]+0.2, s = '2',fontsize = 40)
plt.text(fixed_pos[3][0],fixed_pos[3][1]+0.2, s = '3',fontsize = 40)
plt.text(fixed_pos[4][0],fixed_pos[4][1]+0.2, s = '4',fontsize = 40)
plt.text(fixed_pos[5][0],fixed_pos[5][1]+0.2, s = '5',fontsize = 40)
plt.text(fixed_pos[6][0],fixed_pos[6][1]+0.2, s = '6',fontsize = 40)
plt.text(fixed_pos[7][0],fixed_pos[7][1]+0.2, s = '7',fontsize = 40)
plt.text(fixed_pos[8][0],fixed_pos[8][1]+0.2, s = '8',fontsize = 40)
plt.text(fixed_pos[9][0],fixed_pos[9][1]+0.2, s = '9',fontsize = 40)
plt.text(fixed_pos[10][0],fixed_pos[10][1]+0.2, s = '10',fontsize = 40)
plt.text(fixed_pos[11][0],fixed_pos[11][1]+0.2, s = '11',fontsize = 40)
plt.show()
View Code
从文件中读取数据来画图
cat testdata.txt
0.0 0.0
1.0 1.0
2.0 4.0
3.0 9.0
4.0 16.0
5.0 25.0
6.0 36.0
7.0 49.0
8.0 64.0
9.0 81.0
View Code
importnumpy as npimportmatplotlib.pyplot as plt#Use numpy to load the data contained in the file#testdata.txt into a 2-D array called data
data = np.loadtxt('testdata.txt')#plot the first column as x, and second column as y
plt.plot(data[:,0], data[:,1], 'ro')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(0.0, 10.)
plt.show()
View Code
写入数据到文件
importnumpy as np#Let's make 2 arrays (x, y) which we will write to a file#x is an array containing numbers 0 to 10, with intervals of 1
x = np.arange(0.0, 10., 1.)#y is an array containing the values in x, squared
y = x*xprint 'x =', xprint 'y =', y#Now open a file to write the data to#'w' means open for 'writing'
file = open('testdata.txt', 'w')#loop over each line you want to write to file
for i inrange(len(x)):#make a string for each line you want to write
#'str()' means you are converting the quantity in brackets to a string type
txt = str(x[i]) + '\t' + str(y[i]) + '\n'
#write the txt to the file
file.write(txt)#Close your file
file.close()
View Code
参考:
matplotlib中文翻译