pip install matplotlib
一、各种图
#线形图
import numpy as np
import pandas as pd
df1=pd.DataFrame(data=np.random.randn(1000,4),index=pd.date_range(start='10/10/2023',periods=1000),columns=list('ABCD'))
df1.cumsum().plot()
#2、条形图
df2=pd.DataFrame(data=np.random.rand(10,4),columns=list('ABCD'))
df2
df2.plot.bar(stacked=True)#stacked表示堆叠
#3、饼图,百分比,自动计算
df3=pd.DataFrame(data=np.random.rand(4,2),index=list('ABCD'),columns=['One','Two'])
df3.plot.pie(subplots=True,figsize=(8,8),colors=np.random.random(size=(4,3)))#figsize尺寸,subplots表示>=两个图,colors可以不写
#散点图
df4=pd.DataFrame(np.random.rand(50,4),columns=list('ABCD'))
df4.plot.scatter(x='A',y='B')#A和B关系绘制
# #在一张图中绘制AC散点图,同时绘制BD散点图
# ax=df4.plot.scatter(x='A',y='C',color='DarkBlue',label='Group 1');
# df4.plot.scatter(x='B',y='D',color='DarkGreen',label='Group 2',ax=ax)
# #气泡图,散点有大小之分
# df4.plot.scatter(x='A',y='B',s=df4['C']*200)
df4['F']=df4['C'].map(lambda x : x+np.random.randint(0,5,size=1)[0])
df4
df4.plot.scatter(x='C',y='F')
#5、面积图
df5=pd.DataFrame(data=np.random.rand(10,4),columns=list('ABCD'))
df5.plot.area(stacked=True);#是否堆叠,是
二、Matplotlib基础
2.1 图形绘制
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,2*np.pi,100)
y=np.sin(x)#正弦波,x:Numpy数组。所有的数据,进行正弦计算
plt.plot(x,y)
plt.xlim(-1,10)
plt.ylim(-1.5,1.5)
plt.grid(color='green',alpha=0.5,linestyle='--',linewidth=1)
2.2 坐标轴刻度、标签、标题
列表生成式,本机字体查找
from matplotlib import font_manager
fm=font_manager.FontManager()
[font.name for font in fm.ttflist]#列表生成式,本机字体查找
plt.figure(figsize=(9,6))#图的尺寸
plt.plot(x,y)
plt.rcParams['font.family']='KaiTi'#设置字体,不显示负号
plt.rcParams['font.size']=28
plt.rcParams['axes.unicode_minus']=False#可显示数字的负号
plt.title('正弦波',fontsize=28,color='red',pad=20)#pad间距
plt.xlabel('X')
plt.ylabel('f(x)=sin(x)',rotation=0,horizontalalignment='right')#rotation设置标签为水平,horizontalalignment='right'标签右对齐
a=plt.yticks([-1,0,1])#调整刻度
_=plt.xticks([0,np.pi/2,np.pi,1.5*np.pi,2*np.pi],[0,r'$\frac{\pi}{2}$',r'$\pi$',r'$\frac{3\pi}{2}$',r'$2\pi$'],color='red')
2.3 图例
import numpy as np
import matplotlib.pyplot as plt
#1、图形绘制
x=np.linspace(0,2*np.pi)#x轴
#y轴
y=np.sin(x)
#绘制线形图
#调整尺寸
plt.figure(figsize=(9,6))
plt.plot(x,y)
#2、图例
plt.plot(x,np.cos(x))#余弦波
plt.legend(['Sin','Cos'],fontsize=18,loc='center',ncol=2,bbox_to_anchor=[0,1.05,1,0.2])#x,y,width,height,左下角(0,0),右上角(1,1)
2.4 脊柱移动(坐标轴的移动)
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(-np.pi,np.pi,50)
plt.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(9,6))
#plot绘制两个图形,x-y成对出现,可以!!!
plt.plot(x,np.sin(x),x,np.cos(x))
ax=plt.gca()#获取当前视图
# ax.set_facecolor('green')#全图底色变绿
#右边和上面脊柱消失
# ax.spines['right'].set_color('white')
# ax.spines['top'].set_color('#FFFFFF')
ax.spines['right'].set_alpha(0)#效果和上面两行一样
ax.spines['top'].set_alpha(0)
# #设置下面左边脊柱位置,data表示数据,axes表示相对位置0~1
ax.spines['bottom'].set_position(('data',0))#下面的线放在竖直中间
ax.spines['left'].set_position(('data',0))#左边的线放在水平中间
plt.yticks([-1,0,1],labels=['-1','0','1'],fontsize=18)
_=plt.xticks([-np.pi,-np.pi/2,np.pi/2,np.pi],labels=[r'$-\pi$',r'$-\frac{\pi}{2}$',r'$\frac{\pi}{2}$',r'$\pi$'],fontsize=18)
# plt.grid()#网格线
plt.savefig('./1.png')#图片保存,dpi=300高清,jpg,pdf都可以存