import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
最常用的是第三個fig,axes = plt.subplots的方法。
plt.figure+plt.plot
直接plot會自動生成figure,如果設置figure(num圖表序號,figsize圖表大小),則每個plot會放到最近的figure中。
fig1=plt.figure(num=1,figsize=(4,3))
plt.plot(np.random.rand(50).cumsum(),'k--')#被放在num=1的figure中
fig2=plt.figure(num=2,figsize=(8,6))
s=pd.Series(np.random.rand(20))
s.plot(kind='bar',edgecolor='b')#被放在num=2的figure中
plt.xticks(np.arange(0,22,2))#只對最近的figure作用
plt.figure+fig.add_subplot
用plt.figure創建fig。
ax1=fig.add_subplot(1,2,1)生成尺寸爲1行2列的兩個子圖的第一個,subplot的標號從1開始。
可以利用plt.plot()在最近的子圖中繪圖,或者ax1.plot()在聲明的ax1子圖中繪圖。
# 先創建figure,再add_subplot
fig=plt.figure(figsize=(10,4),facecolor='gray')
# 創建子圖後plt.plot會繪製到距離最近的子圖中
ax1=fig.add_subplot(1,2,1)#從1開始編號
plt.plot(np.random.rand(50),'k--.')
plt.plot(np.random.rand(50),'r-x')
# ax2.plot直接在子圖後用圖表創建函數直接生成圖表
ax2 = fig.add_subplot(1,2,2) # 第二行的右圖
df = pd.DataFrame(np.random.rand(10, 3), columns=['a', 'b', 'c'])
ax2.plot(df,alpha=0.5,linestyle='--',marker='x')
plt.subplots+axes[0,1].plot()
用plt.subplots創建figure,並返回subplot對象的numpy數組。
利用數組索引在相應的子圖中plot。
fig,axes = plt.subplots(1,3,sharex=True,sharey=True,figsize=(12,3))
# sharex,sharey:是否共享x,y刻度
plt.subplots_adjust(wspace=0.3,hspace=0)
# wspace,hspace:用於控制寬度和高度的百分比,subplot之間的間距
#在子圖上plot,一維只需要一個索引參數,二維有兩個,行列都從0開始編號。
axes[0].plot(np.random.rand(10),'b--')
#在daraframe上plot,ax標註子圖
df=pd.DataFrame(np.random.rand(10,3),columns=list('abc'))
df.plot(kind='bar',ax=axes[2],grid=True,colormap='Blues_r',stacked=True,edgecolor='black')#stacled=True 堆疊柱狀圖
subplots參數
subplots參數確定是否分別繪製子圖,layout調整子圖佈局。
df = pd.DataFrame(np.random.randn(100, 4), columns=list('ABCD'))
df = df.cumsum()
df.plot(style = '--.',alpha = 0.8,grid = True,figsize = (8,8),
subplots = True,#是否分別繪製子圖,False則繪製在一張圖上
layout = (2,2),#更改子圖佈局,按順序填充
sharex = False, sharey=True)#是否共享座標
plt.subplots_adjust(wspace=0,hspace=0.2)#子圖水平、垂直方向的間距