Настройте ось matplotlib, чтобы показать все значения в определенном диапазоне - PullRequest
0 голосов
/ 02 мая 2019

У меня есть следующие данные CSV:

x,y
1,5
2,3
4,4
5,7
8,3
9,4

Который я легко могу построить:

https://imgur.com/wRhNhsf.png

import pandas as pd

df = pd.read_csv("graph.csv")

print(df.dtypes)

df.plot.bar(x='x', y='y')

Как видите, в моих исходных данных у меня нет значений для x = 3, x = 6, x = 7 и x = 10. Предположим, что полные данные должны быть до 10.

Можно ли без изменения CSV определить диапазон (0,10) и добавить к графику значения x, которых нет в CSV со значением y, равным 0? Как это:

https://imgur.com/IdUFj9I.png

Я не смог найти никакой документации о том, как этого добиться! Большое спасибо

1 Ответ

0 голосов
/ 02 мая 2019

Если это может быть полезно для кого-либо, я отправляю, как я решил это.Данные, где x - часы, следующие:

x,y
0:30,5
1:00,3
2:30,4
6:00,7
9:00,3
13:00,4
15:30,8
17:30,5
20:00,7
22:30,2
23:30,6

И код:

import pandas as pd
import datetime as dt

df = pd.read_csv("graph.csv")

df['x'] = pd.to_datetime(df['x'])

df = df.set_index(["x"])

s = dt.datetime.strptime('00:00:00', '%H:%M:%S')
r = []
r.append(s.strftime('%H:%M:%S'))

for i in range(30,60*24,30):
    r.append((s+dt.timedelta(minutes=i)).strftime('%H:%M:%S'))

row = [0]

r = pd.to_datetime(r)

for i in r:
    if i in df.index:
        pass
    else:
        df.loc[i] = row

df.sort_index(inplace=True)

df.sum(level=0).plot.bar(stacked=True, figsize=(50,30),edgecolor='k', linewidth=1, width=1)
...