文章目录
- 基本绘图
- Matplotlib 多图布局
- 均匀分布
- 子图 subplot
- subplots
- 图例
- 线条属性
- 坐标轴刻度
- 设置坐标轴范围
- 标题和网格
- 标签
- 文本
- 注释
- 保存图片
- matplotlib 常用视图
- 折线图
- 柱形图/条形图
- 簇状柱形图
- 堆叠柱状图
- 条形图
- 直方图
- 箱形图
- 散点图
- 饼图
- 面积图
- 热力图
- 极坐标图
- 雷达图
- 等高线图
导包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
运行时需要配置参数
rcParams:runtime configuration Parameters
如果浏览器不显示图片,就需要加上这句话
%matplotlib inline
让图片显示中文
plt.rcParams[‘font.sans-serif’] = ‘SimHei’
让图片中可以显示负号
plt.rcParams[‘axes.unicode_minus’] =False
支持矢量图
%config Inlinebackend.figure_format = ‘svg’
查看自己电脑中的字体
from matplotlib.font_manager import FontManagerfm = FontManager()
my_fonts = set(f.name for f in fm.ttflist)
my_fonts
基本绘图
颜色: color = ‘b’,‘g’,‘r’,‘c’,‘m’,‘y’,‘k’,‘w’
样式line style:ls = ‘-’,‘–’,‘-.’ ,‘:’,逗号’,’ ,‘o’,‘^’,‘<’,‘>’,‘s’,‘+’
‘b–’ 蓝色虚线
# 基本绘图
x= np.linspace(-5,5,50) # 把-5,5 之间分成50份
y = x**2
# 画布配置
# figsize 画布大小,宽高.dpi:分辨率,像素密度
# facecolor:北京颜色
plt.figure(figsize=(5,3),dpi=200,facecolor='r')# 设置网格
plt.grid()
# 折线图
plt.plot(x,y,color='r')
show()的用法
# 在一个画布上绘制多张图
x = np.linspace(0,8)
plt.plot(x,np.sin(x))
plt.show()# 立刻显示完上面的一个 重新显示下面的一个绘图
plt.plot(x,np.cos(x),'go')
Matplotlib 多图布局
均匀分布
子图 subplot
fig = plt.figure(figsize=(6,4)) # 画布配置x = np.linspace(-np.pi,np.pi,30)
y = np.sin(x)ax1 = plt.subplot(221) # 表示两行两列中的第一个图
ax1.plot(x,y)
ax1.set_title('子图1')ax2 = plt.subplot(222) # 表示两行两列中的第2个图
ax2.plot(x,y)
ax2.set_title('子图2')ax3 = plt.subplot(2,2,3) # 表示两行两列中的第3个图
ax3.plot(x,y)
ax3.set_title('子图3')ax4 = plt.subplot(2,2,4) # 表示两行两列中的第4个图
ax4.plot(x,y)
ax4.set_title('子图4')#自动调整布局
fig.tight_layout()
fig = plt.figure(figsize=(6,4)) # 画布配置x = np.linspace(-np.pi,np.pi,30)
y = np.sin(x)ax1 = plt.subplot(221) # 表示两行两列中的第一个图
ax1.plot(x,y)ax2 = plt.subplot(222) # 表示两行两列中的第2个图
ax2.plot(x,y)ax3 = plt.subplot(2,1,2) # 表示两行一列中的第二行
ax3.plot(x,np.sin(x*x))
subplots
# 设置成3行3列的图
fig,ax = plt.subplots(3,3)
ax1,ax2,ax3=ax
ax11,ax12,ax13 =ax1
ax21,ax22,ax23 =ax2
ax31,ax32,ax33 = ax3# fig设置画布的大小
fig.set_figwidth(8)
fig.set_figheight(8)# 画图
ax11.plot(x,np.sinh(x))
ax12.plot(x,np.cosh(x))
ax13.plot(x,np.tanh(x))ax21.plot(x,np.sin(x))
ax22.plot(x,np.cos(x))
ax23.plot(x,np.tan(x))ax31.plot(x,np.tan(x))
ax32.plot(x,np.power(x,2))
ax33.plot(x,np.square(x))# 如果图形有一些重叠
plt.tight_layout()
图形嵌套
fig = plt.figure(figsize=(8,5))#子图1
axes1 = fig.add_subplot(1,1,1)
axes1.plot([0,1],[1,3])# 嵌套一个图 方法一
axes2 = fig.add_subplot(2,2,1,facecolor ='pink')
axes2.plot([0,1],[1,3])# 嵌套图 方法二
# left,bottom,width,height
axes3=plt.axes([0.5,0.5,0.4,0.38])
axes3.plot(x,x*x)# 嵌套图 方法三
axes4 = fig.add_axes([0.12,0.11,0.38,0.38])
axes4.plot(x,x*x*x)
共享轴域
# 图1
axes1 = plt.gca() #得到当前轴域
axes1.plot(x,np.exp(x),c='r')
axes1.set_xlabel('时间') #x轴标签
axes1.set_ylabel('exp',c='r')
axes1.tick_params(axis='y',labelcolor='r') # y轴刻度# 图2
axes2 = axes1.twinx() #表示和图一共享x轴
axes2.plot(x,np.power(x,2),'g-.')
axes2.set_ylabel('x^2')
axes2.tick_params(axis='y',labelcolor='g')
图例
plt.legend() #需要在plot中添加label='name’才可以将图例的信息显示出来
plt.legend([‘sin’,‘cos’]) # 不需要再plot中添加任何信息,中括号,第一条线的名字,第二条线的名字等等,,
plt.legend(['sin','cos'],fontsize = 18,loc='center',ncol =2, #显示成两列,默认为一列#图例的具体位置[x,y,width,height]bbox_to_anchor = [0,1,1,0.2] )
线条属性
color: 颜色
linestyle:样式
linewidth:线条宽度
alphs:线的透明度,[0,1]
marker:标记
markersize:标记大小
mfc: marker face color标记背景颜色
markeredgecolor: 标记的边缘颜色
# 图例
plt.plot(x,np.sin(x),c='r',marker='p',linestyle=':',linewidth='3',label='sin',mfc='k')
#plt.legend()plt.plot(x,np.cos(x),c='pink',marker='.',linestyle=':',linewidth='5',label='cos',mfc='m')
plt.legend()
坐标轴刻度
xticks
yticks
plt.xticks(ticks = np.arange(0,11,1),fontsize=20,color='red')
plt.yticks([-1,0,1] #刻度值,刻度大小labels=['min','0','max'],ha='right' # y轴的水平对齐方式)
设置坐标轴范围
plt.xlim(-5,8)
plt.ylim(-2,2)
plt.axis([-5,8,-2,2])
option: off不显示坐标轴,equal:让x轴和y轴 刻度距离相同 scaled:自动缩放 tight:紧凑型自动适配图片square:让图的大小类似于正方形的大小
plt.axis(‘scaled’) #不显示坐标轴
标题和网格
title
grid
plt.title('sin',fontsize=20,loc='center')
plt.suptitle('--20240318父标题', y=0.3, #设置位置fontsize=18)
# 网格线
plt.grid()
plt.grid(ls='--',lw=0.5,c='gray', axis='y') #只显示y轴的
标签
plt.xlabel('y=sin(x)',fontsize=18,rotation=45)
plt.ylabel('y=sin(x)',rotation=0,horizontalalignment='right') # rotation 默认为90
文本
plt.text(0,0.25,'hello')for a,b in zip(x,np.sin(x)):plt.text(a,b+0.3,s=np.round(b,2), #文本内容fontsize=10,color='k',ha='left', #水平居中va='center' #垂直居中)
注释
annotate
plt.annotate(
text='最大值',xy=(2,1), #标注的坐标点,箭头指向的位置xytext=(2,0.25), #标注内容的位置#箭头样式arrowprops={'width':3, # 箭头线的宽度'headwidth':8, #箭头头部的宽度'facecolor':'blue' #箭头的背景颜色}
)
保存图片
savefig 存储画布
plt.savefig(fname='sin.png',#支持png,jpg等dpi=200,facecolor='yellow',pad_inches = 1 # 最边上与图片的距离)
matplotlib 常用视图
折线图
plt.plot()
柱形图/条形图
plt.bar(data.月份,data.语文)
plt.figure(figsize=(5,3))
plt.title('年度销售额')
plt.xlabel('年份')
plt.ylabel('销售额')plt.bar(x,y,width=0.9)for a,b in zip(x,y):plt.text(x=a,y=b,s='{:.1f}万'.format(b/10000),ha='center',fontsize=9)
簇状柱形图
x=bf2.年份
y1,y2,y3=bf2.北区,bf2.中区,bf2.南区
w=0.2
plt.bar(x-w,y1,width=w)
plt.bar(x,y2,width=w)
plt.bar(x+w,y3,width=w)
堆叠柱状图
plt.bar(x,y1,)
plt.bar(x,y2,bottom=y1)
plt.bar(x,y3,bottom=y1+y2)
条形图
plt.barh()
直方图
plt.hist()
# bins:分组
#plt.hist(x,bins=5)
# 左闭右开
plt.hist(x,bins=[0,3,6,9,10])
plt.xticks(range(10))
plt.show()
箱形图
plt.boxplot()
空心点:异常值
上界,上四分位3/4,中位数2/4,下四分位1/4,下界
四分位距:3/4的值-1/4的值
如果a>四分位距*1.5 这为异常值
# 箱形图
x=[1,2,3,4,5,6,20]
plt.boxplot(x)
plt.show()# 一次画多个箱形图
x1 = np.random.randint(10,100,100)
x2 = np.random.randint(30,100,100)
x3 = np.random.randint(60,100,100)
plt.boxplot([x1,x2,x3])#
data=np.random.normal(size=(500,4))
labels=list('ABCD')plt.boxplot(data,labels=labels,notch=True, # 箱型图样式sym='r*' # 异常值的颜色和形状)
plt.show()
散点图
plt.scatter(x,y)
plt.hexbin(x,y)
# 气泡图
plt.figure(figsize=(5,3))
data = np.random.randn(100,2)
s=np.random.randint(50,200,size=100) #控制点的大小
c=np.random.randn(100) # 控制点的颜色
plt.scatter(data[:,0],data[:,1],s=s,c=c,alpha=0.6)# 六边形
plt.hexbin(x,y,gridsize=20,cmap='rainbow')
饼图
x=[10,20,30,40]
plt.pie(x,autopct='%.0f') #不保留小数
#plt.pie(x,autopct='%.2f%%') #保留2位小数并显示%
plt.show()
plt.figure(figsize=(4,4))
plt.pie(df.销量,autopct='%.1f%%',pctdistance =0.8, # 百分比文字距离圆心的位置labels=citys, #标签labeldistance=1.3,#shadow=True #阴影textprops={'fontsize':12,'color':'yellow'}, # 文字样式# 呈现分类效果explode=[0,0,0,0,0.6,0,0,0,0,0])
甜甜圈
plt.figure(figsize=(4,4))
plt.pie(df.销量,autopct='%.1f%%',pctdistance =0.8, # 百分比文字距离圆心的位置labels=cap, #标签textprops={'fontsize':9,'color':'black'}, # 文字样式# 甜甜圈,width控制中间小圆的大小,edgecolor控制各个圆环之间的颜色wedgeprops={'width':0.4,'edgecolor':'w'})
多个圈
plt.figure(figsize=(6,6))
plt.pie(values1,autopct='%.1f%%',pctdistance =0.8, # 百分比文字距离圆心的位置labels=cap, #标签textprops={'fontsize':9,'color':'black'}, # 文字样式# 甜甜圈,width控制中间小圆的大小,edgecolor控制各个圆环之间的颜色#wedgeprops={'width':0.4,'edgecolor':'w'})# 第二个图
plt.pie(
x=values2,autopct='%.1f%%',pctdistance=0.8,textprops={'fontsize':9},#半径radius=0.6
)
plt.legend()
面积图
plt.stackplot(x,y)
plt.stackplot(x,y)
plt.plot(x,y)
plt.show()
热力图
plt.figure(figsize=(14,10))
#热力图
plt.imshow(data,cmap='Blues')
#修改刻度
plt.xticks(range(len(x)),x)
plt.yticks(range(len(y)),y)# 显示数值
for i in range(len(x)):for j in range(len(y)):plt.text(x=i,y=j,s=data[j,i],ha='center',va='center',fontsize=10)
plt.colorbar() # 显示颜色条
极坐标图
N=8x=np.linspace(0,2*np.pi,N,endpoint=False)
height=np.random.randint(3,15,size=N)
color = np.random.rand(8,3)# 画图
#polar:极坐标
axes=plt.subplot(111,projection='polar')
axes.bar(x=x,height=height,width=2*np.pi/N,bottom=0,color=color)
雷达图
至少要三个点
N=8x=np.linspace(0,2*np.pi,N,endpoint=False)
y=np.sin(x)#有些图形没有闭合,需要手动闭合
x=np.concatenate((x,[x[0]]))
y=np.concatenate((y,[y[0]]))axes=plt.subplot(111,polar=True)
axes.plot(x,y,'o-',lw=2)
axes.fill(x,y,alpha=0.3)# 显示刻度
axes.set_rgrids([0.2,0.4,0.6,0.8],fontsize=12)
等高线图
x=np.linspace(-5,5,100)
y=np.linspace(-5,5,100)X,Y = np.meshgrid(x,y)
Z=np.sqrt(X**2+Y**2)
# 画等高线
cp = plt.contourf(X,Y,Z)
plt.colorbar(cp)
plt.show()