当前位置: 首页 > 知识库问答 >
问题:

(如何)我可以将seaborn Skine函数应用于单个子地块?

江洲
2023-03-14

我正在尝试绘制一个选择框和胡须子地块,仅在左侧地块上有一个可见的y轴。我正在通过熊猫数据帧循环来实现这一点。然而,无论何时使用,我用来移除轴的鄙视函数似乎都适用于所有绘图。在这种情况下,最后的子图应该没有y轴,但该轴也会从左侧图中删除。有没有办法绕过这个问题?

是否可以将每个子批次与应用于其他子批次的鄙视功能隔离?这似乎只发生在卑鄙的函数中。当前代码如下所示,但我也尝试在循环之前(使用[fig,axs=plt.subplot(ncols=3,nrows=4)]和循环内部(ax=plt.subplot(4,3,q 1))创建特定轴,然后尝试在seaborn绘图函数中调用ax=ax)。

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

sns.set(rc={"figure.figsize":(10,20)}, font_scale=1) # set size of plots and font
sns.set_style("ticks", {"font.sans-serif": "Arial"}) # set style for plots
sns.set_palette("cubehelix", n_colors=len(participants)) # set colour palette for individual datapoints

plt.figure
for q in range(11):
    plt.subplot(4,3,q+1)
    qplot = sns.swarmplot(data=eval("s" + str(q+1)), x="variable", y="value", hue="Participant", size=3) # plot individual participant data as points
    qplot.legend().set_visible(False) # hide the legend for individual participant data
    qplot = sns.boxplot(data=eval("s" + str(q+1)), x="variable", y="value", palette="Greys", linewidth=2, fliersize=0, width=0.85) # plot the boxplot
    qplot.set(ylim=(-3.5,3.5), xlabel="Condition", ylabel="Response") # set y axis values and label axes
    plt.title("S" + str(q+1)) # add a title
    if (q == 0) or (q == 3) or (q == 6):
        qplot.set(xticklabels=[], xlabel=None, xticks = []) # remove ticks and labels
        sns.despine(bottom = True, top=True, right=True, left=False, trim=True) # remove spines 
    if (q == 1) or (q == 2) or (q == 4) or (q == 5) or (q == 7):
        qplot.set(xticklabels=[], xlabel=None, xticks = [], yticklabels=[], ylabel = None, yticks = []) # remove ticks and labels
        sns.despine(bottom = True, top=True, right=True, left=True, trim=True) # remove spines
    if (q == 9):
        sns.despine(top=True, right = True,trim=True) # remove spines
    if (q == 8) or (q == 10):
        qplot.set(yticks = [], yticklabels=[], ylabel = None) # remove ticks and labels
        sns.despine(bottom=True, top=True, left=True, right=True, trim=True) # remove spines
    for axis in ["top","bottom","left","right"]: 
        qplot.spines[axis].set_linewidth(2) # set linewidth of axes
        qplot.tick_params(axis = "x", width=0) # set linewidth of x ticks to zero
        qplot.tick_params(axis = "y", width=2) # set linewidth of y ticks

共有1个答案

顾昊穹
2023-03-14

对于将来偶然发现这个问题的寻求答案者,您可以使用sns.skeene()执行如下操作以显示/隐藏轴网格中的脊椎:

fig, axs = plt.subplots(4,3)
for ax in axs.flat:
    if ax.is_first_col():
        if ax.is_last_row():
            sns.despine(bottom=False, left=False, ax=ax)
        else:
            sns.despine(bottom=True, left=False, ax=ax)
    elif ax.is_last_row():
        sns.despine(bottom=False, left=True, ax=ax)
    else:
        sns.despine(bottom=True, left=True, ax=ax)

@PaulH很好地重构了上面的代码。他的版本更紧凑,更容易阅读:

fig, axs = plt.subplots(4,3)
for ax in axs.flat:
    sns.despine(bottom=not ax.is_last_row(), left=not ax.is_first_col(), ax=ax)
 类似资料:
  • 问题内容: 可以说我有一个这样的列表: 我有一个函数,假设我想将该函数应用于该函数的每个子列表,可以计算出有关两个列表的一些分数。如何将此功能应用于的每个列表并在新列表中返回每个分数,如下所示: 我尝试使用以下功能: 问题答案: 您可以使用内置函数来执行此操作。 因此,如果您要应用的函数是,则可以执行以下操作: 在中,上面返回了一个地图迭代器,因此您需要一个显式调用: 如果您要为此编写一些必须在P

  • 问题内容: 在将其标记为重复之前,让我向您解释,我已经阅读了此页面以及许多其他内容,但仍然没有找到解决问题的方法。 这就是我遇到的问题:给定两个2D数组,我想在两个数组上应用函数F。F将两个一维数组作为输入。 请注意,这仅用于演示。这里真正的问题是在两组一维数组上工作的泛型函数F。 向量化要么完全失败,要么出错,或者应用逐个元素的功能,而不是逐个数组(或逐行) 迭代地应用功能;例如,使用上面所定义

  • 我试图计算一个折扣,我想应用到我的数据帧的两列中的每一行,并将结果添加到一个新列中。 我已经尝试了很多方法,通过遵循现有的例子,但是每次都发生错误。 我将函数定义为: 然后尝试将该函数应用于我的数据框 我希望有一个新的列,其中每一行都是应用于ordini[“revenue1”]和ordini[“revenue2”]的函数的结果。 但我得到了以下错误: ValueError:序列的真值不明确。使用a

  • 问题内容: 我对熊猫还很陌生,所以我希望这将是一个简单的答案(我也感谢所有指向数据框设置的指针) 假设我有以下DataFrame: 现在,我想按“ gp”分组并获取“ vector”的均值 我试过了 乃至 但我收到一个错误,没有要聚合的“数字类型”。那么np.arrays在熊猫中不起作用吗? 问题答案: 对我来说,它有效: 我取两次平均值,因为您想要向量均值的均值组值(不是吗?)。 如果要使用均值

  • 我正在使用pandas函数,希望从字符串中删除多个字符。 我正在尝试使用< code>pandas清理CSV文件中的一些交易数据。我有一个以< code>Object数据类型存储交易金额的列。在将它更改为< code>float数据类型之前,我需要从大于< code>999.99的数字中删除< code>$字符和任何< code >,字符。我可以一次做一个。但是,我想知道是否可以传入多个值来清理它

  • 如何在熊猫身上做到这一点: 更新2:这个问题是在V0.11.0左右提出的。因此,许多问题和答案都不太相关。