我试图制作一个由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")
生成下面的图表(勾选标签混合):
我期待看到的是这样的事情(使用R制作):
我在这里缺少什么?
答案 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_index
和reindex
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")