import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
最常用的是第三个fig,axes = plt.subplots的方法。
直接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。
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创建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参数确定是否分别绘制子图,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)#子图水平、垂直方向的间距