使seaborn镶嵌面的宽度与沿x轴的数据范围成比例

2024-10-04 11:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用了FacetGrid()模块中的seaborn将一个折线图分解为段,每个段的标签作为每个子段的标题。我在文档中看到了使x轴独立的选项。但是,我找不到任何与绘图大小与每个轴的大小相对应的内容

下面是我用来生成此图的代码以及该图

import matplotlib.pyplot as plt
import seaborn as sns

# Added during Edit 1.
sns.set()

graph = sns.FacetGrid(rmsf_crys, col = "Subunit", sharex = False)
graph.map(plt.plot, "Seq", "RMSF")
graph.set_titles(col_template = '{col_name}')

plt.show()

由上述代码生成的绘图1

编辑1

使用relplot()而不是直接调用FacetGrid()更新了绘图代码。最终结果是相同的图形

import matplotlib.pyplot as plt
import seaborn as sns

# Forgot to include this in the original code snippet.
sns.set()

graph = sns.relplot(data = rmsf_crys, x = "Seq", y = "RMSF", 
                    col = "Subunit", kind = "line", 
                    facet_kws = dict(sharex=False))
graph.set_titles(col_template = '{col_name}')

plt.show()

Tags: 代码import绘图matplotlibaspltcolseaborn
1条回答
网友
1楼 · 发布于 2024-10-04 11:25:01

对此的完全支持需要在matplotlib层上实现,我认为目前不可能有独立的轴,但可以共享变换。(对matplotlib scale内部有更深入了解的人可能会证明我错了)

但是,通过提前计算所需的x范围,并使用该范围参数化面的gridspec,您可以非常接近:

import numpy as np, seaborn as sns
tips = sns.load_dataset("tips")
xranges = tips.groupby("size")["total_bill"].agg(np.ptp)
xranges *= 1.1  # Account for default margins
sns.relplot(
    data=tips, kind="line",
    x="total_bill", y="tip",
    col="size", col_order=xranges.index,
    height=3, aspect=.65,
    facet_kws=dict(sharex=False, gridspec_kws=dict(width_ratios=xranges))
)

enter image description here

相关问题 更多 >