Я пытаюсь нанести выборку сюжетов типа «ящик с усами» с видимой осью y только на графиках слева.Я делаю циклы данных для панд, чтобы сделать это.Однако функция despine, которую я использую для удаления осей, по-видимому, применяется ко всем графикам, когда бы она ни использовалась.В этом случае конечный участок не должен иметь оси y, но ось также удаляется из графиков с левой стороны.Есть ли способ обойти это?
Можно ли изолировать каждый участок от функции деспина, примененной к другим?Это, кажется, происходит только для функции despine.Текущий код приведен ниже, но я также попытался создать определенные оси как до цикла (используя [fig, axes = plt.subplots (ncols = 3, nrows = 4)]), так и внутри цикла (ax = plt.subplot (4,3, q + 1), затем пытается вызвать 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