Python / Pandas - разные цвета меток на линейке с накоплением - PullRequest
0 голосов
/ 23 февраля 2019

Я хотел бы изменить цвет метки первого блока (темного цвета) в каждом столбце для лучшей визуализации.Есть ли способ?

ps: я бы не хотел менять текущую цветовую палитру.Просто цветная метка первого блока!

enter image description here

Код ниже:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

sns.set_style("white")
sns.set_context({"figure.figsize": (7, 5)})

df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
           columns=['a', 'b', 'c'])

fig, ax = plt.subplots()
ax = df.plot.bar(stacked=True, cmap="cividis", alpha=1, edgecolor="black")
sns.despine(top=False, right=True, left=False, bottom=True)

#add text
for p in ax.patches:
    left, bottom, width, height =  p.get_bbox().bounds
    if height > 0 :
        ax.annotate("{0:.0f}".format(height), xy=(left+width/2, bottom+height/2), ha='center', va='center')

1 Ответ

0 голосов
/ 23 февраля 2019

Если вы хотите сохранить ту же карту цветов и изменить цвет метки, вы можете указать параметр color в функции annotate следующим образом.

 ax.annotate("{0:.0f}".format(height), xy=(left+width/2, bottom+height/2), ha='center', va='center', color="white")

Существуют другие конфигурации, такие как размер шрифта и т. Д.Первый блок означает 1, 4, 7 блоков в массиве.Таким образом, вы можете извлечь первую строку фрейма данных и проверить, является ли высота одним из значений ячейки, используя np.isin() например;

firstblocks = (df.iloc[:, 0])
for p in ax.patches:
    left, bottom, width, height = p.get_bbox().bounds

    if np.isin(p.get_height(), firstblocks):
        ax.annotate("{0:.0f}".format(height), xy=(left + width / 2, bottom + height / 2), ha='center', va='center',
                    color="white", fontsize=12)
    else:
        ax.annotate("{0:.0f}".format(height), xy=(left + width / 2, bottom + height / 2), ha='center', va='center')

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...