Правильно обозначить сегменты линейчатой ​​диаграммы на основе DataFrame - PullRequest
0 голосов
/ 31 октября 2019

Я построил столбчатую диаграмму с накоплением (см. Здесь: https://imgur.com/a/ESJeHuF),, сформированный из приведенного ниже фрейма данных.

                            condition1       condition2      condition3
timestamp                                                
2019-10-30 01:41:43             1.0             4.0             0.0
2019-10-30 01:50:11             1.0             2.0             4.0
2019-10-30 01:50:59             1.0             2.0             4.0
2019-10-30 01:51:36             1.0             2.0             4.0
2019-10-30 01:52:27             1.0             3.0             4.0
2019-10-30 01:53:10             2.0             4.0             0.0
2019-10-31 02:25:14             5.0             0.0             0.0
2019-10-31 04:15:54             5.0             0.0             0.0

Я бы хотел, чтобы цвета на гистограмме соответствовали их соответствующим значениямв кадре данных через этот список цветов:

color_list = ['r', 'g', 'b', 'm', 'k', 'k']

(например, если значение от 2-го до последнего временного шага равно 5, для окраски сегмента гистограммы с накоплением как 'k'с таким поведением, повторяющимся для всех сегментов столбцов столбчатой ​​диаграммы с накоплением.

Приведенный ниже код изображает столбцы с накоплением, однако изменяет их цвет (ссылка выше показывает это). Он назначает только первые три цвета всемзначения, где в Dataframe больше соответствующих цветов / значений. Правильный график должен иметь метки времени на оси x, а сегменты столбцов для каждого условия - правильные цвета.

import matplotlib.pyplot as plt
from matplotlib.cm import ScalarMappable
data_color = [0.,1.,2.,3.,4.,5.] #data range from conditions columns
data_color = [x / max(data_color) for x in data_color]   
print(data_color)
custom_map = plt.cm.get_cmap('Accent') #one of the color schemas stored
custom = custom_map(data_color)  #mapping the color info to the variable custom
print(custom)
fig = plt.figure()
ax = fig.add_subplot(111)
df.plot.bar(stacked=True, rot=1, legend=False, ax=fig.gca(), color=custom)

Буду очень признателен за любую помощь, заранее спасибо.

1 Ответ

1 голос
/ 31 октября 2019

IIUC вы хотите, чтобы все столбцы одинаковой высоты имели одинаковый цвет. Я не уверен, что это можно сделать с помощью сопоставления цветов, но вы можете вручную раскрасить столбцы после создания графика:

color_list = ['r', 'g', 'b', 'm', 'k', 'c']
plot = df.plot.bar(stacked=True, legend=False)
for bar in plot.patches:
    bar.set_color(color_list[int(bar.get_height())])

enter image description here

...