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

posted @ 2021-01-09 22:56  司砚章  阅读(66)  评论(0编辑  收藏  举报