Python-Matplotlib
py-Matplotlib基本用法
import matplotlib.pyplot as plt #matplotlib.pyplot缩减为plt import numpy as np #数据的库 x=np.linspace(-1,1,50) #-1到1的50个点 #y=2*x+1 #一次函数 y=x**2+1 #二次函数 plt.plot(x,y) #绘制出来 plt.show() #显示出来
- 绘制直线
import matplotlib.pyplot as plt #将(0,1)和(2,4)连接起来 plt.plot([0,1],[2,4]) plt.show()
- 绘制折线
import matplotlib.pyplot as plt #绘制一条折线 x=[1,2,3,4,5] y=[1,4,9,16,25] plt.plot(x,y) plt.show()
- 设置样式及中文标题
import matplotlib.pyplot as plt #绘制一条折线 x=[1,2,3,4,5] y=[1,4,9,16,25] #设置线条的宽度 plt.plot(x,y,linewidth=5) #设置标题 x轴 和y轴 #plt.title('Numbers',fontsize=24) #用来正常显示中文标签 plt.rcParams['font.sans-serif']=['SimHei'] plt.title('多个点折线图',fontsize=24) plt.xlabel('x',fontsize=14) plt.ylabel('y',fontsize=24) plt.show()
- 绘制曲线
import matplotlib.pyplot as plt from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False #200个点的x坐标 x=range(-100,100) y=[i**2 for i in x] #绘制曲线 plt.plot(x,y) plt.title('一元二次方程图',fontsize=24) plt.xlabel('x',fontsize=14) plt.ylabel('y',fontsize=24) #保存图片 plt.savefig('result')#默认格式为png plt.show()
- 绘制正余弦曲线
import matplotlib.pyplot as plt import numpy as np from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False #200个点的x坐标 x=np.linspace(0,10,100) sin_y=np.sin(x) cos_y=np.cos(x) #绘制曲线 plt.plot(x,sin_y,x,cos_y) plt.title('正弦曲线',fontsize=24) plt.xlabel('x',fontsize=14) plt.ylabel('y',fontsize=24) #保存图片 #plt.savefig('result')#默认格式为png plt.show()
- subplot的用法
import matplotlib.pyplot as plt import numpy as np from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False #200个点的x坐标 x=np.linspace(0,10,100) sin_y=np.sin(x) cos_y=np.cos(x) #绘制曲线 subplot(2,2,1) xlim(-5,20) ylim(-2,2) plt.plot(x,sin_y) plt.title('正弦曲线',fontsize=24) plt.xlabel('x',fontsize=14) plt.ylabel('y',fontsize=24) subplot(2,2,4) plt.plot(x,cos_y) plt.title('余弦曲线',fontsize=24) plt.xlabel('x',fontsize=14) plt.ylabel('y',fontsize=24) #保存图片 #plt.savefig('result')#默认格式为png plt.show()
- 散点图
import matplotlib.pyplot as plt import numpy as np from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False #200个点的x坐标 x=np.linspace(0,10,100) y=np.sin(x) #绘制曲线 plt.scatter(x,y) #或者plt.plot(x,y,'o') plt.title('散点图',fontsize=14) plt.xlabel('x',fontsize=14) plt.ylabel('y',fontsize=24) #保存图片 #plt.savefig('result')#默认格式为png plt.show()
- 绘制不同颜色和大小的散点图
import matplotlib.pyplot as plt import numpy as np from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False #绘制10种大小,100种颜色的散点图 np.random.seed(0) #执行多次每次获得的随机数都是一样的 x=np.random.rand(100) y=np.random.rand(100) #10种大小 #scatter里面s必须是个标量,或者与x和y有相同的维度 #size=np.random.randint(10)*100 #或者 size=np.random.rand(100)*100 #100种颜色 color=np.random.rand(100) plt.scatter(x,y,s=size,c=color,alpha=0.7)#s表示大小 c表示颜色,alpha表示透明度 plt.show()
- 绘制不同样式 不同颜色的线条+图例
import matplotlib.pyplot as plt import numpy as np from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False x=np.linspace(0,10,100) #添加label plt.plot(x,x+0,'--g',label='--g') plt.plot(x,x+1,'-.r',label='-.r') plt.plot(x,x+2,'*y',label='*y') #图例默认位置在左上角,可以通过loc进行修改 #添加图例 还有不同是属性 plt.legend(loc='lower right',fancybox=True,framealpha=1,shadow=True,borderpad=1)#放在右下角 #fancybox是边框 framealpha是透明度 shadow是阴影 borderpad是边框宽度 plt.show()
- 绘制柱状图
import matplotlib.pyplot as plt import numpy as np from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False #年份 x=[1980,1985,1990,1995] x_label=['1980年','1985年','1990年','1995年'] #销量 y=[1000,3000,4000,5000] #修改柱的宽度width plt.bar(x,y,width=3) #修改x坐标的值 plt.xticks(x,x_label) plt.xlabel('年份') plt.ylabel('销量') plt.title('年份销量对比图') plt.show()
- bar和barh函数的使用
import matplotlib.pyplot as plt import numpy as np from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False np.random.seed(0) x=np.arange(5) y=np.random.randint(-5,5,5) plt.subplot(1,2,1) #画布1行2列 第一个区域bar 第二个区域 barh plt.bar(x,y,color='b') #在0位置增加蓝色线条 plt.axhline(0,color='b',linewidth=2) #水平方向是axhline plt.subplot(1,2,2) #将y和x进行对换 #竖着的地方为x轴 plt.barh(x,y,color='r') plt.axvline(0,color='r',linewidth=2) #垂直方向是axvline plt.show()
- 不同颜色的柱
import matplotlib.pyplot as plt import numpy as np from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False np.random.seed(0) x=np.arange(5) y=np.random.randint(-5,5,5) v_bar=plt.bar(x,y,color='b') #对y值大于0的设置为蓝色 小于0的设置为绿色 for bar,height in zip(v_bar,y): #zip将v_bar和y组合在一起 if height<0: bar.set(color='g') plt.show()
- 电影票房的柱状图
import matplotlib.pyplot as plt import numpy as np from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False real_names=['千与千寻','玩具总动员','黑衣人'] #三部电影票房数 real_num1=[7548,4013,1673] real_num2=[5453,1840,1080] real_num3=[4348,2345,1890] x=np.arange(len(real_names)) #绘制柱状图 width=0.2 plt.bar(x,real_num1,width=width,color=['aliceblue'],label=real_names[0]) plt.bar([i+width for i in x],real_num2,width=width,color=[0.1, 0.2, 0.5],label=real_names[1]) plt.bar([i+2*width for i in x],real_num3,width=width,label=real_names[2]) #设置x坐标的值 第一天 第一天 #x_label=['第一天','第二天','第三天'] x_label=['第{}天'.format(i+1) for i in x] plt.xticks(x,x_label) plt.ylabel('票房数') plt.legend() plt.title('三天的票房数') plt.show()
- 绘制饼状图
import matplotlib.pyplot as plt import numpy as np from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False man=71351 woman=68187 man_perc=man/(man+woman) woman_perc=woman/(man+woman) #添加mingc labels=['男','女'] #添加颜色 colors=['aquamarine','antiquewhite'] #绘制饼状图 #explode分裂 #autopct显示百分比 paches,texts,autotexts=plt.pie([man_perc,woman_perc],labels=labels,colors=colors,explode=(0,0.05),autopct='%0.1f%%') #设置饼状图中字体的颜色 for text in autotexts: text.set_color('red') #设置字体大小 for text in texts+autotexts: text.set_fontsize(15) plt.show()
- 直方图绘制:注重分布状态
import matplotlib.pyplot as plt import numpy as np from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False #正态分布 x=np.random.randn(1000) #plt.hist(x) #修改柱的宽度 使用bins plt.hist(x,bins=100)#10个柱抓在一起 plt.show()
- 使用normal指定期望和方差的正态分布
import matplotlib.pyplot as plt import numpy as np from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False #正态分布 x=np.random.normal(0,0.8,1000) y=np.random.normal(-2,1,1000) z=np.random.normal(3,2,1000) kwargs=dict(bins=100,alpha=0.5)#设置字典 plt.hist(x,**kwargs)#传入字典用** plt.hist(y,**kwargs) plt.hist(z,**kwargs) plt.show()
- 绘制等高线图
import matplotlib.pyplot as plt import numpy as np from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False x=np.linspace(-10,10,100) y=np.linspace(-10,10,100) #计算x和y的相交点a X,Y=np.meshgrid(x,y) #计算z的坐标 Z=np.sqrt(X**2+Y**2) plt.contour(X,Y,Z) plt.show()
- contourf是将等高线进行填充
- 绘制三维图
import matplotlib.pyplot as plt import numpy as np #导入3D包 from mpl_toolkits.mplot3d import Axes3D from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #正常显示负号 matplotlib.rcParams['axes.unicode_minus'] = False X=[1,1,2,2] Y=[3,4,4,3] Z=[1,100,1,1] #创建Axes3D对象 fig=plt.figure()#创建fig画布 ax=Axes3D(fig)#创建一个Axes3D子图放到画布里面 ax.plot_trisurf(X,Y,Z) plt.show()
转载请注明出处,欢迎讨论和交流!