如何在 Seaborn 中叠加两个图表?

Posted

技术标签:

【中文标题】如何在 Seaborn 中叠加两个图表?【英文标题】:How can I overlay two graphs in Seaborn? 【发布时间】:2021-08-10 06:40:32 【问题描述】:

我的数据中有两列我希望将它们放在同一个图表中。我怎样才能保留两个图的标签。

【问题讨论】:

不清楚这个问题在问什么。什么样的图表?您可以使用 seaborn 制作多种图表,正确的方法会因您正在做的事情而有所不同。变量之间的关系是什么? “保留标签”是什么意思?您希望如何区分这两个变量?在任何情况下,如果会有一个普遍的答案,这将是一个关于 matplotlib 的答案,而不是 seaborn。 (1) 任何类型的图表 (2) 当然 (3) 标签仍然存在。两个图的轴标签例如 (4) 颜色例如 如前所述,这取决于图形的类型。在这个相关问题中,我给出了一个通过设置FacetGrid 覆盖regplots 并通过map()ing 添加层的示例。 ***.com/questions/48145924 【参考方案1】:

对单个轴进行操作的 seaborn 函数可以将一个轴作为参数。

例如,seaborn.kdeplot 的文档包括:

ax : matplotlib axis, optional
    Axis to plot on, otherwise uses current axis

如果你这样做了:

df = function_to_load_my_data()
fig, ax = plt.subplots()

你可以这样做:

seaborn.kdeplot(df['col1'], ax=ax)
seaborn.kdeplot(df['col2'], ax=ax)

【讨论】:

谢谢,唯一的缺点是标签不适用于两个图表。 @DavoudTaghawi-Nejad 你有ax 对象,所以你可以在那个时候做任何事情,真的。 在这种情况下如何添加图例? @famargar matplotlib.org/tutorials/intermediate/legend_guide.html【参考方案2】:

一种解决方案是引入辅助轴:

    fig, ax = plt.subplots()
    sb.regplot(x='round', y='money', data=firm, ax=ax)
    ax2 = ax.twinx()
    sb.regplot(x='round', y='dead', data=firm, ax=ax2, color='r')
    sb.plt.show()

【讨论】:

在这种情况下有一个图例可能会有所帮助。为此,您可以在 seaborn 函数中使用标签参数,但显然您需要在每个绘图函数之后调用 plt.legend()【参考方案3】:

这些数据是关于 Private vs Public 拼贴数据,但可以工作,因为我们可以看到我们将所有全局参数加载到 seaborn 对象,然后我们将图表映射到同一个窗格。

import seaborn as sns

import matplotlib.pyplot as plt

import pandas as pd


df = pd.read_csv('College_Data',index_col=0)

g = sns.FacetGrid(df,hue='Private',palette='coolwarm',size=6,aspect=2)

g.map(plt.hist,'Outstate',bins=20,alpha=0.7)

See Chart

【讨论】:

以上是关于如何在 Seaborn 中叠加两个图表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 seaborn 散点图中编辑多个图例框?

数据可视化-使用Python进行图表叠加

Python 绘图总结(seaborn库的使用) (上)

在 seaborn 图表中对分类标签进行排序

Seaborn:注释线性回归方程

如何将多列绘制成单个 seaborn boxenplot