Как вы заметили, для каждого блока построено 6 линий (отсюда и ваша p*6
индексация).
Линия с индексом p*6+4
имеет ширину прямоугольника (это средняя линия внутри прямоугольника). Таким образом, мы можем использовать это, чтобы установить ширину других линий.
Строки, которые вы хотите изменить, имеют индекс p*6+2
и p*6+3
.
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.DataFrame({'Data': np.random.random(100), 'Type':['Category']*100})
fig, ax = plt.subplots()
# Plot boxplot setting the whiskers to the 5th and 95th percentiles
sns.boxplot(x='Type', y='Data', data=data, color = 'gray', whis = [5,95])
# Adjust boxplot and whisker line properties
for p, artist in enumerate(ax.artists):
artist.set_edgecolor('blue')
for q in range(p*6, p*6+6):
line = ax.lines[q]
line.set_color('pink')
ax.lines[p*6+2].set_xdata(ax.lines[p*6+4].get_xdata())
ax.lines[p*6+3].set_xdata(ax.lines[p*6+4].get_xdata())
Это также работает с примером с несколькими полями:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
tips = sns.load_dataset("tips")
ax = sns.boxplot(x="day", y="total_bill", data=tips)
# Adjust boxplot and whisker line properties
for p, artist in enumerate(ax.artists):
artist.set_edgecolor('blue')
for q in range(p*6, p*6+6):
line = ax.lines[q]
line.set_color('pink')
ax.lines[p*6+2].set_xdata(ax.lines[p*6+4].get_xdata())
ax.lines[p*6+3].set_xdata(ax.lines[p*6+4].get_xdata())