python - 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")
解决方案
当您使用 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()
推荐阅读
- flutter - 按下 clear() 按钮时禁用键盘弹出
- c# - 在 C# 控制台应用程序中将 txt 文件转换为 json 文件
- python - 在 Python + Selenium 中找不到 h3(标题)类
- java - 使用 Java 将用户添加到多个 AD 组
- tensorflow - TF_agents:具有相同随机种子的不同结果
- c# - 如何使用表单在 ASP.NET MVC 和 C# 中搜索我的表?
- docker - Jenkins 管道中的 Docker 凭据
- java - Scala 3 hello world 导入,运行 sbt 时出错
- mysql - 针对 Woocommerce 商店的 MariaDB 优化,即将推出超过 55,000 篇文章
- flutter - Flutter:使用 RepaintBoundary 截取被裁剪的小部件的屏幕截图