Как отображать цвета на основе значений ячеек на отметке времени

У меня есть данные, которые содержат 16 столбцов, из которых 1 столбец — это столбец «Время», а другие 15 столбцов — это столбцы, представляющие цвета. Данные выглядят так:

Как отображать цвета на основе значений ячеек на отметке времениКак отображать цвета на основе значений ячеек на отметке времени

Что мне нужно, так это иметь график, на котором каждая временная метка представляет эти 15 цветов.

Вывод должен выглядеть так:

Как отображать цвета на основе значений ячеек на отметке времени

есть идеи как это сделать?

Спасибо!!

Вы уже пробовали что-то самостоятельно?

user2246849 05.05.2022 08:20

Привет @ user2246849, я пытался сделать это с помощью гистограммы matplotlib, использовал время как значение «x» и длину кадра данных как значение «y», затем добавил цвет из «SG15», но это не так. Работа.

acolyter11 05.05.2022 08:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо использования bar в таких случаях обычно удобнее использовать обычный plot в сегментах. Вот игрушечный пример.

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({'Time':[0.3, 1.5, 1.8, 4.7, 5.8],
                   'SG1':['red', 'green', 'grey', 'yellow', 'red'], 
                   'SG2':['grey', 'red', 'grey', 'yellow', 'grey'], 
                   'SG3':['red', 'red', 'grey', 'yellow', 'red'],
                   'SG4':['red', 'green', 'grey', 'green', 'red']})
   Time     SG1     SG2     SG3    SG4
0     1     red    grey     red    red
1     2   green    grey     red  green
2     3    grey    grey    grey  green
3     4  yellow  yellow  yellow  green
4     5     red    grey     red    red

Код:

LINE_THICKNESS = 10 
FIG_SIZE = (4, 3) # Size (width, height).

f, ax = plt.subplots(figsize=FIG_SIZE)

groups = sorted([c for c in df.columns if 'SG' in c])
for i, group in enumerate(groups):
    colors = df[group]
    
    for (color, t0), t1 in zip(zip(colors, df['Time']), df['Time'][1:]):
        ax.plot([t0, t1], [i, i], color=color, linewidth=LINE_THICKNESS)

plt.xlabel('Time')
plt.ylim([-0.5, len(groups)-0.5])
plt.yticks(range(len(groups)), groups)
plt.ylabel('Groups')
plt.title("Signal plan 2", weight='bold')
plt.tight_layout()
plt.show()

Который дает:

plot example

Вы можете поиграть с размерами LINE_THICKNESS и FIG_SIZE.

Обновлено:

zip встроенная функция берет итерации и объединяет их в кортеж. Так:

  • zip(colors, df['Time']) получает кортеж (color, time_start), чтобы связать временные точки с цветом. Назовем это time_colors в следующей строке.
  • zip(time_colors, df['Time'][1:]) аналогичным образом связывает кортежи (color, time_start) со следующей точкой времени. Это необходимо, чтобы знать предел, чтобы прекратить рисовать линию.

Спасибо, это работает!! У меня только один вопрос: что означает "zip(zip(colors, df['Time']), df['Time'][1:])" во втором цикле for?

acolyter11 05.05.2022 09:03

@Jan Zarcký Я отредактировал ответ с кратким объяснением. Я предлагаю вам научиться пользоваться zip, это действительно полезно!

user2246849 05.05.2022 09:18

Другие вопросы по теме

Как я могу ранжироваться в зависимости от состояния в Pandas
Формирование фрейма данных с уменьшением столбца и увеличением строк
Как вертикально объединить два фрейма данных pandas с разным количеством столбцов
Карта Python Dataframe индексирует столбец списков для извлечения элементов
Отбросьте строки, пока мы не достигнем определенной строки в качестве имени столбца, и добавьте другой фрейм данных после того, как сделаете то же самое в пандах
Замените начало или конец строки в значениях столбца pandas регулярным выражением
Кадр данных Groupby pandas для создания одного столбца списка отдельных групп и счетчиков
Присоединитесь к 2 условиям, используя оператор &
Как векторизовать эту функцию применения панд, которая использует другие значения столбца в качестве новых имен столбцов
Как преобразовать комбинации значений в столбцах в отдельные столбцы?