Данные графика за много дней на гистограмме без информации о дате - PullRequest
1 голос
/ 16 января 2020

У меня есть набор данных, содержащий:

  • дни недели
  • считает за каждый день недели

Например, мой набор данных может быть:

{ 
  "days": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Mon", "Tue", "Wed"],
  "counts": [10, 5, 3, 8, 6, 2, 9, 7, 10, 8]
}

Я хочу нанести данные на график, используя matplotlib. Однако, когда я пытаюсь это сделать, matplotlib автоматически сворачивает точки данных в соответствии с категориями на оси x, а не показывает данные последовательно. Например, вот график, который я получаю:

enter image description here

Очевидно, график был «свернут» повторяющимися категориальными метками на оси x. Как я могу предотвратить это и показать все на графике, не используя информацию о дате? Я хотел бы сохранить метки оси x как «Mon», «Tue» и др. c. а также.

Мой текущий код для графика:

import matplotlib.pyplot as plt

data = { 
  "days": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Mon", "Tue", "Wed"],
  "counts": [10, 5, 3, 8, 6, 2, 9, 7, 10, 8]
}

plt.bar(data['days'], data['counts'])
plt.show()

Ответы [ 2 ]

2 голосов
/ 16 января 2020

Вы можете установить в качестве x-диапазона индексы для ваших списков. А затем установите дни как xticklabels. Кроме того, вы можете раскрасить столбцы, используя день, чтобы показать повторяющуюся структуру:

import matplotlib.pyplot as plt

data = {
  "days": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Mon", "Tue", "Wed"],
  "counts": [10, 5, 3, 8, 6, 2, 9, 7, 10, 8]
}
x = range(len(data['days']))
cmap = plt.cm.plasma
colors = [cmap((xi % 7) / 10 ) for xi in x]
plt.bar(x, data['counts'], color=colors)
plt.xticks(x, data['days'])
plt.show()

PS: При желании вы можете скрыть отметки с помощью plt.tick_params(axis='x', length=0). plot

1 голос
/ 16 января 2020

Проблема заключается в том, что вы даете данные ['days'] как координаты x каждого бара, чтобы они складывались. Чтобы избежать этого, вам необходимо отделить x координаты от x меток . Вот один из способов сделать это:

import matplotlib.pyplot as plt
import numpy as np
data = { 
  "days": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Mon", "Tue", "Wed"],
  "counts": [10, 5, 3, 8, 6, 2, 9, 7, 10, 8]
}
plt.bar(x=np.arange(len(data['days'])), height=list(data['counts']),tick_label=list(data['days']))
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...