Seaborn pairplot 仅针对特定列具有对数刻度

Seaborn pairplot with log scale only for specific columns

我有一个数据框,我正在使用 seaborn pairplot 绘制一个目标列与其余列的对比图。

代码如下,

import seaborn as sns
import matplotlib.pyplot as plt

tgt_var = 'AB'
var_lst = ['A','GH','DL','GT','MS']

pp = sns.pairplot(data=df,
          y_vars=[tgt_var],
          x_vars=var_lst)

pp.fig.set_figheight(6)
pp.fig.set_figwidth(20)

var_lst不是静态列表,我只是提供了一个例子。 我需要的是在 Y 轴上绘制 tgt_var,在 x 轴上绘制每个 var_lst

我可以用上面的代码做到这一点,但我也想仅在 var_lst 项为 'GH' 或 'MS' 时才在 X 轴上使用对数刻度,因为其余正常比例。有什么办法可以实现吗?

如果 xlabel 匹配“GH”或“MS”,则迭代 pp.axes.flat 并设置 xscale="log"

log_columns = ["GH", "MS"]

for ax in pp.axes.flat:
    if ax.get_xlabel() in log_columns:
        ax.set(xscale="log")

鸢尾花数据集的完整示例,其中花瓣列为 xscale="log":

import seaborn as sns

df = sns.load_dataset("iris")
pp = sns.pairplot(df)

log_columns = ["petal_length", "petal_width"]

for ax in pp.axes.flat:
    if ax.get_xlabel() in log_columns:
        ax.set(xscale="log")