用Plotly从pandas数据帧绘制分组条形图

2024-10-01 09:27:43 发布

您现在位置:Python中文网/ 问答频道 /正文

对普洛蒂来说很新鲜,很抱歉如果这是一个明显的。。。我试图创建一个分组条形图,其中包含存储在SQL中的以下信息。在

|-----------|------|-------------|
| RouteName | Hour | JourneyTime |
|-----------|------|-------------|
|Route #1   |6:00  |200          |
|Route #2   |6:00  |400          |
|Route #3   |6:00  |500          |
|Route #1   |7:00  |100          |
|Route #2   |7:00  |300          |
|Route #3   |7:00  |550          |
|Route #1   |8:00  |330          |
|Route #2   |8:00  |450          |
|Route #3   |8:00  |600          |

本质上,我希望Hour列为x,JourneyTime列为y,RouteName列用于区分路由(不同的栏有不同的颜色)。在

我已经成功地(使用下面的代码)从pandas数据帧创建了一个图形。但是,它每小时只显示一个条形图,而不是整个数据集。在

^{pr2}$

看一下链接Adding group bar charts as subplots in plotly我发现可以给它单独的一系列数据,如trace1和trace2。不过,我最终将把它与仪表板中的过滤器框连接起来(而且路线的数量会有所不同),所以我需要灵活性来进行这种更改。在

如能提供任何帮助,我们将不胜感激。在

非常感谢


Tags: 数据代码信息图形路由pandassql颜色
2条回答

可以使用单独的数据帧作为过滤器来创建循环。不是最优雅的解决方案,但确实有效。在

在下面的代码中,df1只得到路由的列表,df2是我们的完整数据集。由此可以循环遍历行并生成一个新的数据帧(df3)。此数据帧创建每个条,这些条都附加在一起,以创建最终绘图。在

import pandas as pd
import pymssql
import plotly
import plotly.graph_objs as go
from plotly.offline import *

ServerNm = str("ServerName")
DatabaseNm = str("DatabaseName")

SQLCon = pymssql.connect(host=ServerNm,database=DatabaseNm)

SQL_Query1 = '''SELECT [RouteName] FROM [Dashboard].[dbo].[JTs_v2] GROUP BY [RouteName]'''
SQL_Query2 = '''SELECT [RouteName], [Hour], [JourneyTime] FROM [Dashboard].[dbo].[JTs_v2]'''

df1 = pd.read_sql(SQL_Query1, SQLCon)
df2 = pd.read_sql(SQL_Query2, SQLCon)

SQLCon.close

bars = []

for index, row in df1.iterrows():

    route=row['RouteName']
    df3 = df2[df2.RouteName == route][['Hour', 'JourneyTime']]
    bars.append(
        go.Bar(
                x=df3.Hour,
                y=df3.JourneyTime,
                name=route))


fig = go.Figure(data=bars)
plotly.offline.plot(fig)

你也可以改变你在飞行中传递的轨迹数。也许是这样的:

df = pd.read_sql(query, con)
traces = [go.Bar(x=subset.Hour, 
                 y=subset.JourneyTime,
                 name=route) 
          for route, subset in df.groupby("RouteName")]
plotly.offline.plot(traces)

相关问题 更多 >