Я пытаюсь скопировать этот коробочный сюжет с морским рожком. У меня будет sh, чтобы иметь деление, как на картинке. Я думал, что смогу создать другой Boxplot и объединение в одном изображении, но не очень хорошая идея для вычислений, создания множества изображений, использования слияния и удаления всех.
Я использовал Seaborn, чтобы таким образом поместить значение в поле
это моя функция:
def boxplot(df, name,prot,min,max):
fig = plt.figure(figsize=(100, 20))
plt.title(name+ " RMSE from "+ str(min) +"h PSW to " + str(max) +"h PWS")
plt.ylabel("RMSE")
plt.xlabel("")
box_plot = sns.boxplot(x="Interval" ,y="RMSE", data=df, palette="Set1", showfliers = False)
ax = box_plot.axes
lines = ax.get_lines()
categories = ax.get_xticks()
for cat in categories:
# every 4th line at the interval of 6 is median line
# 0 -> p25 1 -> p75 2 -> lower whisker 3 -> upper whisker 4 -> p50 5 -> upper extreme value
y = round(lines[4+cat*5].get_ydata()[0],3)
ax.text(
cat,
y,
f'{y}',
ha='center',
va='center',
fontweight='bold',
size=70,
color='white',
bbox=dict(facecolor='#445A64'))
box_plot.figure.tight_layout()
plt.savefig("output/"+str(prot)+ str(name)+".jpg")
plt.close(fig)
Я также добавил этот код для каждого цвета (fooli sh), чтобы установить одинаковый цвет для всех одинаковых элементов в блоке. Пример объявления для значений "15" на оси X, я установил красный и т. Д. ...
для i в диапазоне (0, len (box_plot.artists), 12):
mybox = ax.artists[i]
mybox.set_facecolor('red')
for i in range(1,len(box_plot.artists),12):
mybox = ax.artists[i]
mybox.set_facecolor('orange')
Я пытался использовать «оттенок» для категории в моем наборе данных (добавив строку 15,30 рядом с различными значениями), но при использовании оттенка боксплот примет такое большое расстояние между ними, как это, и мне действительно не нравится .
Я пытался использовать "заказ" как то же самое, но не получалось.