在 Seaborn 多图中调整 y 轴

Posted

技术标签:

【中文标题】在 Seaborn 多图中调整 y 轴【英文标题】:Adjust y-axis in Seaborn multiplot 【发布时间】:2019-11-27 19:05:02 【问题描述】:

我正在根据我的模拟结果绘制一个 CSV 文件。该图在同一图中有三个图fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(24, 6))

但是,出于比较目的,我希望所有图表中的 y 轴从零开始,以特定值结束。我尝试了 Seaborn 作者提到的here 的解决方案。我没有收到任何错误,但该解决方案也不适用于我。

这是我的脚本:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

fname = 'results/filename.csv'

def plot_file():
    fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(24, 6))
    df = pd.read_csv(fname, sep='\t')
    profits = \
        df.groupby(['providerId', 'periods'], as_index=False)['profits'].sum()

    # y-axis needs to start at zero and end at 10
    g = sns.lineplot(x='periods',
                     y='profits',
                     data=profits,
                     hue='providerId',
                     legend='full',
                     ax=axes[0])

    # y-axis need to start at zero and end at one
    g = sns.scatterplot(x='periods',
                        y='price',
                        hue='providerId',
                        style='providerId',
                        data=df,
                        legend=False,
                        ax=axes[1])
    # y-axis need to start at zero and end at one
    g = sns.scatterplot(x='periods',
                        y='quality',
                        hue='providerId',
                        style='providerId',
                        data=df,
                        legend=False,
                        ax=axes[2])

    g.set(ylim=(0, None))
    plt.show()

    print(g) # -> AxesSubplot(0.672059,0.11;0.227941x0.77)

结果图如下:

如何调整每个单独的图?

【问题讨论】:

【参考方案1】:

根据您编写代码的方式,您可以使用g.axis 引用每个子图轴并使用g.axis.set_ylim(low,high)。 (与链接答案相比,不同之处在于您的图表没有绘制在 seaborn FacetGrid 上。)

一个使用虚拟数据和不同轴范围的例子来说明:

df = pd.DataFrame(np.random.uniform(0,10,(100,2)), columns=['a','b'])

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(8,4))


g = sns.lineplot(x='a',
                 y='b',
                 data=df.sample(10),
                 ax=axes[0])
g.axes.set_ylim(0,25)

g = sns.scatterplot(x='a',
                    y='b',
                    data=df.sample(10),
                    ax=axes[1])
g.axes.set_ylim(0,3.5)

g = sns.scatterplot(x='a',
                    y='b',
                    data=df.sample(10),
                    ax=axes[2])
g.axes.set_ylim(0,0.3)

plt.tight_layout()
plt.show()

【讨论】:

我找到了轴的文档,而且非常简单。我解决了axes[0].set(ylim=(0, None)) axes[1].set(ylim=(-0.05, 1.05)) axes[2].set(ylim=(-0.05, 1.05))

以上是关于在 Seaborn 多图中调整 y 轴的主要内容,如果未能解决你的问题,请参考以下文章

如何调整多图布局的relplot Seaborn子图之间的空间[重复]

Seaborn/Plotly 多个 y 轴

如何调整 seaborn.regplot 中的 x 轴

如何在 seaborn FacetGrid 中格式化 y 轴或 x 轴标签

seaborn热图y轴逆序

如何将 y 轴转换为 Seaborn 图中的 % 值? [复制]