为啥将两个条形图子图合并为一个会改变轴,我该如何解决?
Posted
技术标签:
【中文标题】为啥将两个条形图子图合并为一个会改变轴,我该如何解决?【英文标题】:Why does merging two bar chart subplots into one change the axis and how can I fix this?为什么将两个条形图子图合并为一个会改变轴,我该如何解决? 【发布时间】:2022-01-16 10:51:12 【问题描述】:我有两个数据框:
df1=pd.DataFrame(10*np.random.rand(4,3),index=[2,3,4,5],columns=["I","J","K"])
df2=pd.DataFrame(10*np.random.rand(4,3),index=[1,2,3,4],columns=["I","J","K"])
创建条形图后,我得到:
现在我想将它们合并成一个图,所以我尝试了:
fig, ax = plt.subplots(sharex=True)
ax1 = df1.plot.bar(legend=True, rot=0, stacked=True, width=0.1, position=1, colormap="bwr", ax=ax, alpha=0.7)
ax2 = df2.plot.bar(legend=True, rot=0, stacked=True, width=0.1, position=0, colormap="BrBG", ax=ax, alpha=0.7)
plt.show()
但结果不是我所期望的:
如您所见,我希望 x 轴具有值 1、2、3、4、5,并且图形与它们的原始索引值相对应。问题出在哪里,我该如何解决?
此外,如果可能的话,我需要自动设置新的轴值,因为我有许多这些数据帧都具有不同的轴值,并且手动插入新的轴值需要很长时间。也许我可以在索引列中使用.unique()
并以某种方式实现它?
【问题讨论】:
【参考方案1】:您可以将两个数据帧重新索引到同一个索引:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
df1 = pd.DataFrame(10 * np.random.rand(4, 3), index=[2, 3, 4, 5], columns=["I", "J", "K"])
df2 = pd.DataFrame(10 * np.random.rand(4, 3), index=[1, 2, 3, 4], columns=["I", "J", "K"])
fig, ax = plt.subplots()
combined_index = df1.index.union(df2.index)
df1.reindex(combined_index).plot.bar(legend=True, rot=0, stacked=True, width=0.1, position=1,
colormap="bwr", alpha=0.7, ax=ax)
df2.reindex(combined_index).plot.bar(legend=True, rot=0, stacked=True, width=0.1, position=0,
colormap="BrBG", alpha=0.7, ax=ax)
plt.show()
Pandas 条形图使用数据框的索引创建分类 x 刻度(内部编号为 0,1,2,...
)。首先分配内部刻度位置,然后分配标签。通过对两个数据框使用相同的索引,位置将重合。
【讨论】:
确实如此。更新似乎更符合熊猫哲学。我只用这些数字指数进行了测试。index.union()
可能更安全,例如有日期。
第一个答案combined_index = np.unique(df1.index.to_list() + df2.index.to_list())
也很完美。正是我想要的。谢谢。以上是关于为啥将两个条形图子图合并为一个会改变轴,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
我有 2 个不同的条形图,它们有一个共同的 X 轴和 2 个不同的 Y 轴。我想使用 python 将这两个使用 X 轴的图合并为一个
单击 matplotlib 中的步骤图子图点时如何使标签出现(或可能是 plotly)?