Matplotlib - 在子图之间共享轴时缺少一些刻度

时间:2017-01-18 10:19:00

标签: python pandas matplotlib

我试图制作一个由2个子图和一个共享的y轴组成的图,但有些'嘀嗒'缺失。一个例子:

import matplotlib.pyplot as plt
import pandas as pd

df_a = pd.DataFrame({"Foo" : pd.Series(['A','B','C']), "Bar" : pd.Series([1,2,3])})
df_b = pd.DataFrame({"Foo" : pd.Series(['B','C','D']), "Bar" : pd.Series([4,5,6])})

fig, axes = plt.subplots(nrows=1, ncols=2, sharex= True, sharey=True)

df_a.plot.barh("Foo", "Bar", ax=axes[0], legend=False, title="df_a")
df_b.plot.barh("Foo", "Bar", ax=axes[1], legend=False, title="df_b")

生成下面的图表(勾选标签混合):

enter image description here

我期待看到的是这样的事情(使用R制作):

enter image description here

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您需要相同的索引,因此一种可能的解决方案是concat

df = pd.concat([df_a.set_index('Foo'), df_b.set_index('Foo')], axis=1)
df.columns = ['a','b']
print (df)
     a    b
A  1.0  NaN
B  2.0  4.0
C  3.0  5.0
D  NaN  6.0

df.a.plot.barh(ax=axes[0], legend=False, title="df_a")
df.b.plot.barh(ax=axes[1], legend=False, title="df_b")

另一个解决方案是set_indexreindex union indexes

df_a = df_a.set_index('Foo')
df_b = df_b.set_index('Foo')
df_a = df_a.reindex(df_a.index.union(df_b.index))
df_b = df_b.reindex(df_a.index.union(df_b.index))
print (df_a)
     Bar
Foo     
A    1.0
B    2.0
C    3.0
D    NaN

print (df_b)
     Bar
Foo     
A    NaN
B    4.0
C    5.0
D    6.0



df_a.plot.barh( ax=axes[0], legend=False, title="df_a")
df_b.plot.barh( ax=axes[1], legend=False, title="df_b")