Я пытаюсь создать коробчатую диаграмму с различными категориями и наложить на нее точки разброса. Проблема, с которой я сталкиваюсь, заключается в том, что когда результаты по категориям очень похожи, коробчатые диаграммы перекрываются (см. рисунок, в частности панель 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
Блок-график с точками разброса: предотвращение перекрытия, когда категории похожи ⇐ Python
Программы на Python
1762945218
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[i]
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[i],
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()
Подробнее здесь: [url]https://stackoverflow.com/questions/79817644/boxplot-with-scatter-points-preventing-overlap-when-categories-are-similar[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия