首页 > 解决方案 > Plotly:如何用 x=hour 绘制直方图?

问题描述

我有一系列数据,下面只有行

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")

标签: pythonmatplotlibplotlyjupyterplotly-python

解决方案


当您使用 pandas 时,您可以通过创建数据透视表同时使用grouper聚合每小时的值来做到这一点:

import pandas as pd

data = [['9:32', 'System'], ['9:32', 'Class'], ['9:32', 'System'], ['9:32', 'System'], ['9:32', 'System'], ['9:32', 'Class'], ['9:32', 'System'], ['9:32', 'Class'], ['10:32', 'System'], ['10:32', 'System'], ['10:32', 'Class'], ['11:22', 'Class'], ['11:22', 'System'], ['11:22', 'System'], ['11:32', 'System'], ['11:32', 'Class'], ['11:32', 'Class'], ['12:32', 'System'], ['12:32', 'Class']]

df = pd.DataFrame(data, columns=['Time','Component'])
df['Time'] = pd.to_datetime(df['Time']) # convert Time to datetime object 
df.pivot_table(index=pd.Grouper(key = 'Time', freq = 'H'), columns='Component', aggfunc=len, fill_value=0).plot(kind='bar')

结果:

结果

如果你想在 plotly 中绘制图表:

import plotly.graph_objects as go

df2 = df.pivot_table(index=pd.Grouper(key = 'Time', freq = 'H'), columns='Component', aggfunc=len, fill_value=0).plot(kind='bar')

fig = go.Figure(data=[
    go.Bar(name='Class', x=df2.index, y = df2.Class),
    go.Bar(name='System', x=df2.index, y = df2.System)
])

fig.update_layout(barmode='group')
fig.show()

结果: 结果情节


推荐阅读