Блок-график с точками разброса: предотвращение перекрытия, когда категории похожиPython

Программы на Python
Ответить
Anonymous
 Блок-график с точками разброса: предотвращение перекрытия, когда категории похожи

Сообщение Anonymous »

Я пытаюсь создать коробчатую диаграмму с различными категориями и наложить на нее точки разброса. Проблема, с которой я сталкиваюсь, заключается в том, что когда результаты по категориям очень похожи, коробчатые диаграммы перекрываются (см. рисунок, в частности панель B, метрика TSS).
Я пытался отрегулировать ширину прямоугольников, но в результате это приводит к смещению точек разброса относительно блоков, что не идеально.
Может ли кто-нибудь предложить лучший способ предотвратить перекрытие коробчатых диаграмм, сохраняя при этом правильное выравнивание точек рассеяния?
Большое спасибо!
Изображение

Вот код, который я использовал:
map_levels = {
0.5: "High",
0.2: "Medium",
0.1: "Low",
0.01: "Extremely low"
}

simulated_RF["Prevalence_level"] = simulated_RF["Prevalence"].map(map_levels)

order_levels = ["High", "Medium", "Low", "Extremely low"]
simulated_RF["Prevalence_level"] = pd.Categorical(
simulated_RF["Prevalence_level"], categories=order_levels, ordered=True
)

metrics_to_plot = ["AUC", "TSS", "BrierScore", "LogLoss"]

palette_custom = ["cornflowerblue", "orange"]

fig, axes = plt.subplots(2, 2, figsize=(14, 10))
axes = axes.flatten()

panel_labels = ["A)", "B)", "C)", "D)"]

for i, metric in enumerate(metrics_to_plot):

ax = axes
df_m = simulated_RF[simulated_RF["Metric"] == metric]

sns.boxplot(
data=df_m,
x="Prevalence_level",
y="Value",
hue="Type",
dodge=True,
ax=ax,
palette = palette_custom
)

sns.stripplot(
data=df_m,
x="Prevalence_level",
y="Value",
hue="Type",
dodge=True,
palette=["black", "black"],
size=4,
jitter=True,
alpha=0.5,
ax=ax
)

ax.set_title(metric, fontsize=16)
ax.set_xlabel("Prevalence level", fontsize=13)
ax.set_ylabel(metric, fontsize=13)
ax.set_xticks(range(len(order_levels)))
ax.set_xticklabels(order_levels, fontsize=11)
ax.tick_params(axis="y", labelsize=11)

ax.text(-0.1, 1.05, panel_labels,
transform=ax.transAxes, fontsize=16, fontweight="bold")

handles, labels = ax.get_legend_handles_labels()
if i == 0:
legend_handles = handles[:2]
legend_labels = labels[:2]
ax.get_legend().remove()

fig.legend(
legend_handles, legend_labels,
loc="lower center", ncol=2,
fontsize=13, title_fontsize=13
)

fig.tight_layout(rect=[0, 0.05, 1, 0.95])
plt.show()


Подробнее здесь: https://stackoverflow.com/questions/798 ... re-similar
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»