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()

转载请注明出处,欢迎讨论和交流!

浙公网安备 33010602011771号