У меня есть ряд данных с только строками ниже

Time,Component
9:32,System
9:32,Class
9:32,System
9:32,System
9:32,System
9:32,Class
9:32,System
9:32,Class
9:32,System
9:32,System
9:32,Class
9:32,Class
9:32,System
9:32,System
9:32,System
9:32,Class
9:32,Class
9:32,System
9:32,Class

Как построить гистограмму с осью X - это часовой ряд, а по оси Y - количество Компонентов, произошедших за этот час.

Я пробовал ниже, но он не показывает никаких данных.

import plotly.express as px
series['datetime']=pd.to_datetime(series['Time'])
df = series
fig2 = px.histogram(df, x=df.datetime, y=df.Component, histfunc='sum', title='Histogram Chart')
fig2.show(renderer="iframe_connected")
2
Aries 23 Янв 2021 в 10:46

3 ответа

Лучший ответ

Я бы использовал px.bar после того, как позаботился о структуре данных с помощью pd.pivot_table. Ваш предоставленный набор данных не имеет особого смысла для вашей задачи, поскольку вам понадобится еще несколько уникальных временных меток, чтобы показать то, что вы хотите, поэтому я добавил несколько точек данных в ваш источник.

Некоторые основные шаги (полный код в конце):

# data munging using pandas
dfp = pd.pivot_table(df,index=pd.Grouper(key = 'Time', freq = 'H'),
                     columns='Component',
                     aggfunc=len,
                     fill_value=0)

# plotly express figure
fig = px.bar(dfp, x=dfp.index, y = ['Class', 'System'])
fig.update_layout(barmode='group')

Участок:

enter image description here

Полный код:

# imports
import plotly.express as px
import pandas as pd

# data
df = pd.DataFrame({'Time': {0: '9:32',
                          1: '9:32',
                          2: '9:32',
                          3: '9:32',
                          4: '9:32',
                          5: '9:32',
                          6: '9:32',
                          7: '9:32',
                          8: '13:32',
                          9: '13:32',
                          10: '13:32',
                          11: '17:22',
                          12: '17:22',
                          13: '17:22',
                          14: '17:32',
                          15: '19:32',
                          16: '19:32',
                          17: '19:32',
                          18: '19:32'},
                         'Component': {0: 'System',
                          1: 'Class',
                          2: 'System',
                          3: 'System',
                          4: 'System',
                          5: 'Class',
                          6: 'System',
                          7: 'Class',
                          8: 'System',
                          9: 'System',
                          10: 'Class',
                          11: 'Class',
                          12: 'System',
                          13: 'System',
                          14: 'System',
                          15: 'Class',
                          16: 'Class',
                          17: 'System',
                          18: 'Class'}})

# data munging us pd.pivot_table
df['Time'] = pd.to_datetime(df['Time'])
dfp = pd.pivot_table(df, index=pd.Grouper(key = 'Time', freq = 'H'), columns='Component', aggfunc=len, fill_value=0)

# plotly
fig = px.bar(dfp, x=dfp.index, y = ['Class', 'System'])
fig.update_layout(barmode='group')
fig.show()
0
vestland 23 Янв 2021 в 10:51
import matplotlib.pyplot as plt

df.set_index('Time', inplace=True)
Component_count = df['Component'].resample('H').count()
Time_Component_count = pd.DataFrame({'Time': Component_count.index, 'Component Count': Complonent_count.values})

plt.hist(x = Time_Component_count['Time'], y = Time_Component_count['Component Count'])
plt.show()
0
Prakriti Shaurya 23 Янв 2021 в 08:52