Как я могу заполнить область на этом участке? - PullRequest
0 голосов
/ 23 сентября 2018

Я хотел бы заполнить синие разделы "местоположение" на графике ниже.Сами данные отмечают возникновение значительного изменения местоположения, представляют собой временные ряды в 15-минутных выборках и повторяют последнее местоположение, пока не произойдет новое событие изменения местоположения.Так, например, когда «дом» был зарегистрирован, его столбец остался на 1, а все остальное на 0. Затем, когда «рабочий» был посещен следующий, этот столбец стал 1, и дом присоединился к остальным на 0.

plot with locations

u1 = userLocAppDfs['user_3'].copy()
# https://stackoverflow.com/questions/11927715/how-to-give-a-pandas-matplotlib-bar-graph-custom-colors
locations = [(x/8.75, x/40.0, 0.85) for x in range(5)] # color grad

u1[[' bar', ' grocers', ' home', ' lunch', ' work']].plot(color=locations, figsize=(15,10))

u1[' app_3'].plot(color='orange')
u1[' app_1'].plot(color='r')

Я заметил, что fillstyle = 'full' ничего не делает.Как правильно заполнить области моего графика?

пример данных

    app_1   app_2   user    bar grocers home    lunch   park    relatives   work
date                                        
2017-08-29 14:00:00 0.013953    0.052472    user_1  0.0 0.0 0.0 0.0 0.0 0.0 1.0
2017-08-29 14:15:00 0.014070    0.052809    user_1  0.0 0.0 0.0 0.0 0.0 0.0 1.0
2017-08-29 14:30:00 0.014186    0.053146    user_1  0.0 0.0 1.0 0.0 0.0 0.0 0.0
2017-08-29 14:45:00 0.014302    0.053483    user_1  0.0 0.0 1.0 0.0 0.0 0.0 0.0
2017-08-29 15:00:00 0.014419    0.053820    user_1  0.0 0.0 1.0 0.0 0.0 0.0 0.0

1 Ответ

0 голосов
/ 23 сентября 2018

Я не думаю, что это возможно, используя построение панд непосредственно из DataFrame, но вы можете использовать fill_between из matplotlib.Это необходимо сделать для каждого столбца вашего фрейма данных («bar», «home», «work» и т. Д.).Вы можете вручную создать ось и указать matplotlib и pandas нанести на эту ось

import matplotlib.pyplot as plt
fig, ax = plt.subplots(1,1)
for location in [' bar', 'grocers', ' home']:  # or whatever subset of columns you want
    ax.fill_between(range(len(u1[location]), u1[location], step='post')

u1[' app_3'].plot(ax=ax, color='orange')
# etc..

PS. Аргумент fillstyle предназначен для случаев, когда у вас есть маркер для каждой точки данных и вы хотите изменить ее внешний вид:https://matplotlib.org/gallery/lines_bars_and_markers/marker_fillstyle_reference.html


Редактировать: обновленный пример с использованием предоставленных вами данных.Я изменил данные, чтобы добавить точку на планке между работой и домом, чтобы придать сюжету более привлекательный вид.

import matplotlib.pyplot as plt
import pandas as pd

columns = ['date', 'app_1', 'app_2', 'user', 'bar', 'grocers', 'home', 'lunch', 'park', 'relatives', 'work']
data = [['2017-08-29 14:00:00', 0.013953, 0.052472, 'user_1', 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], ['2017-08-29 14:15:00', 0.014070, 0.052809, 'user_1', 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], ['2017-08-29 14:30:00', 0.014186, 0.053146, 'user_1', 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0], ['2017-08-29 14:45:00', 0.014302, 0.053483, 'user_1', 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0], ['2017-08-29 15:00:00', 0.014419, 0.053820, 'user_1', 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0]]

df = pd.DataFrame(data, columns=columns)
height = df[['app_1', 'app_2']].max().max()

fig, ax = plt.subplots(1,1)

df['app_1'].plot(ax=ax, color='orange')
df['app_2'].plot(ax=ax, color='purple')
ax.fill_between(range(len(df['home'])), height * df['home'], step='post', color='blue')
ax.fill_between(range(len(df['work'])), height * df['work'], step='post', color='red')

plt.show()

Данные выглядят так:

                  date     app_1     app_2    user  bar  grocers  home  lunch  park  relatives  work
0  2017-08-29 14:00:00  0.013953  0.052472  user_1  0.0      0.0   0.0    0.0   0.0        0.0   1.0
1  2017-08-29 14:15:00  0.014070  0.052809  user_1  0.0      0.0   0.0    0.0   0.0        0.0   1.0
2  2017-08-29 14:30:00  0.014186  0.053146  user_1  1.0      0.0   0.0    0.0   0.0        0.0   0.0
3  2017-08-29 14:45:00  0.014302  0.053483  user_1  0.0      0.0   1.0    0.0   0.0        0.0   0.0
4  2017-08-29 15:00:00  0.014419  0.053820  user_1  0.0      0.0   1.0    0.0   0.0        0.0   0.0

Выглядит так:

example

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