在不同的绘图行上绘制 Pandas Dataframe 中的列的简单方法?

Posted

技术标签:

【中文标题】在不同的绘图行上绘制 Pandas Dataframe 中的列的简单方法?【英文标题】:Simple Method to Plot Columns in Pandas Dataframe on Different rows of plot? 【发布时间】:2019-03-23 21:16:16 【问题描述】:

是否有一种简单的方法可以使用共享的 X 轴在不同的行/图块上绘制所有列?我不想深入研究每个新图形的 matplotlib 子图;我正在寻找一些简单的东西,可以让我轻松查看数据框中的所有数据。我觉得 Pandas 或 Seaborn 中缺少一个简单的标志或选项。

pandas 中的一个简单 dataframe.plot() 将所有变量堆叠起来:

我想要一种简单的方法(不是很多行的 matplotlib 图形构建),它为数据框中的每个变量(列)创建一个新方面,具有单独的 Y 轴,但共享 X 轴。

也许我在 ggplot2 中忽略了一些东西?

目标 - 类似这样:

【问题讨论】:

您可以发布您的 DataFrame 以供我们复制吗? 【参考方案1】:

像这样?

df.plot(subplots=True, layout=(4,1))

它似乎完全生成了你想要的。

如果你想让标签在情节之外,你可以在df.plot之后做一些处理:

fig = plt.figure(figsize=(14,8))
ax = fig.add_subplot(111)
df = pd.DataFrame(np.random.uniform(size=(20,4)))
df.plot(ax=ax, subplots=True, layout=(4,1)) # ax=ax points df.plot to fig
for each in fig.axes: # You can still modify these axes!
    each.legend(loc='center left', bbox_to_anchor=(1, 0.5))

这会将图例之外的图例设置在右侧,过程与设置任何其他图例相同。

【讨论】:

@EHB 这是文档非常糟糕的 pandas 函数的扩展版本(带有代码示例!):pandas.pydata.org/pandas-docs/stable/visualization.html 作为类似的后续行动 - 您是否找到了一个很好的解决方案,可以将图例放在情节之外而无需诉诸基本级别的 matplotlib 操作? 太棒了!!已经阅读了很多答案非常复杂的SO帖子。你应该在那些上回答这个!非常感谢。 似乎无法使用上述方法调用plt.tight_layout()。还有什么办法可以防止图例中的标签被切断(更长的标签)? @EHB 我以前尝试过tight_layout,但即使在普通的场地上它也从未对我有用。我现在试着远离它......你可以修复你的ax 职位允许更多空间显示标签而不使用tight_layout

以上是关于在不同的绘图行上绘制 Pandas Dataframe 中的列的简单方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pandas DataFrame 绘图函数绘制每个子图的 ylabel

Python pandas,多行的绘图选项

Python图形绘制:如何用Matplotlib和pandas绘图?

pandas 知识点补充:绘图plot

pandas DataFrame“没有要绘制的数字数据”错误

将索引转换为名称 pandas 以进行绘图