У меня есть фрагмент кода, который создает 2 графика seaborn.histogram
на одних и тех же осях, разделенных на hue
и аннотированных:
Две гистограммы соответствующим образом окрашены по-разному с использованием параметра hue
, а количество данных в каждой ячейке также соответствующим образом аннотировано. Однако могу ли я также раскрасить аннотации/счетчики того, что находится в каждой корзине?
Текущий MRE:
np.random.seed(8)
t = pd.DataFrame(
{
'Value': np.random.uniform(low=100000, high=500000, size=(50,)),
'Type': ['B' if x < 6 else 'R' for x in np.random.uniform(low=1, high=10, size=(50,))]
}
)
ax = sns.histplot(data=t, x='Value', bins=5, hue='Type', palette = "dark")
ax.set(title = "R against B")
ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))
for p in ax.patches:
ax.annotate(f'{p.get_height():.0f}\n',
(p.get_x() + p.get_width() / 2, p.get_height()), ha='center', va='center', color='crimson')
plt.show()
Вы ищете метод matplotlib.axes.Axes.get_facecolor.
Таким образом, вы можете сопоставить цвет каждой аннотации с цветом соответствующей гистограммы.
for p in ax.patches:
color = p.get_facecolor()
ax.annotate(f"{p.get_height():.0f}\n", (p.get_x() + p.get_width() / 2, p.get_height()),
ha = "center", va = "center", color=color, fontweight = "bold")
Выход :