我有一个我想切片的pandas数据帧,并在一个单独的子图中绘制每个切片。我想使用sharey='all'
并让matplotlib决定一些合理的y轴限制,而不是必须在数据帧中搜索最小值和最大值并添加偏移量。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.arange(50).reshape((5,10))).transpose()
fig, axes = plt.subplots(nrows=0,ncols=0, sharey='all', tight_layout=True)
for i in range(1, len(df.columns) + 1):
ax = fig.add_subplot(2,3,i)
iC = df.iloc[:, i-1]
iC.plot(ax=ax)
事实上,无论我指定sharey
,'all'
,'col'
,'row'
,True
或{{1 }})。使用False
后我想要的是:
有人可能会解释一下我在这里做错了什么吗?
答案 0 :(得分:1)
以下版本只会为你的df-column添加你需要的那些轴并分享它们的y尺度:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.arange(50).reshape((5,10))).transpose()
fig = plt.figure(tight_layout=True)
ref_ax = None
for i in range(len(df.columns)):
ax = fig.add_subplot(2, 3, i+1, sharey=ref_ax)
ref_ax=ax
iC = df.iloc[:, i]
iC.plot(ax=ax)
plt.show()
这里明确给出...add_subplot(2, 3, ...
的网格布局参数当然可以根据len(df.columns)
进行计算。
答案 1 :(得分:0)
您的地块不会被分享。您创建一个包含0行和0列的子图网格,即根本没有子图,但这些不存在的子图的y轴是共享的。然后,您创建一些其他(现有)子图,这些子图不共享。那些是绘制的。
相反,您需要将nrows
和ncols
设置为一些有用的值,并绘制到那些因此创建的轴。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.arange(50).reshape((5,10))).transpose()
fig, axes = plt.subplots(nrows=2,ncols=3, sharey='all', tight_layout=True)
for i, ax in zip(range(len(df.columns)), axes.flat):
iC = df.iloc[:, i]
iC.plot(ax=ax)
for j in range(len(df.columns),len(axes.flat)):
axes.flatten()[j].axis("off")
plt.show()