首页 > 解决方案 > Python水平条不显示时间戳数据的整个范围

问题描述

我想使用 pyplot 绘制数据可用性。我从@vestland 获得了代码。我的月度数据在这里
一般来说,数据跨度从 2009 年 1 月到 2019 年 1 月。每个变量都有自己的时间段。
下面是代码。

import pandas as pd
import plotly.express as px

path  = r'C:\Users\....\availability3.txt'
df  = pd.read_csv(path)
df  = df.drop(['Unnamed: 0'], axis=1)

fig = px.bar(df, x="Timestamp", y="variable", color='value', orientation='h',
             hover_data=["Timestamp"],
             height=300,
             color_continuous_scale=['firebrick', '#2ca02c'],
             title='Data Availabiltiy Plot',
             template='plotly_white',
            )

fig.update_layout(yaxis=dict(title=''), 
                  xaxis=dict(
                      title='', 
                      showgrid=True, 
                      gridcolor='white',
                      tickvals=[]
                  )
                 )
fig.show()

正如您在下面看到的,该图仅显示第一天数据的第一行。

在此处输入图像描述

我想要的是用相应的值和颜色在 x 轴上显示整个数据范围。结果应显示 2009 年 1 月至 2019 年 1 月的数据,变量值 0 显示为红色,1 显示为绿色。

也许这是时间戳的问题,因为使用数字索引时,情节还可以。

编辑
通过删除数据集中的重复项并将时间戳设置为索引,我得到了几乎预期的结果。这是新代码。

fig = px.bar(df, y="variable", color='value', orientation='h',
             hover_data=[df.index],
             height=300,
             color_continuous_scale=['firebrick', '#2ca02c'],
             title='Data Availabiltiy Plot',
             template='plotly_white',
            )

现在整个时间跨度都按预期显示。但是 x 轴时间戳的值尚未显示。我会在另一个帖子中问

标签: pythonplotly

解决方案


我检查了文档plotly.express.bar并简要使用了您的代码。您的数据可能一个一个堆叠在一起。

设置orientation='v'显示了所有数据,但不是以任何特别直观的方式,尽管我相信它确实回答了你提出的问题。是的,所有的数据Alice, Thalia, Citra, and Pebaru都存在,但y-axis需要修改以获得正确的标签:

在此处输入图像描述

或者,在悬停时设置orientation='h'barmode='overlay'显示所有数据,但不是单独的条形。您可以在条的右边缘看到叠加模糊:

在此处输入图像描述

plotly.express.bar文档中 有很多参数: https ://plot.ly/python-api-reference/generated/plotly.express.bar.html#plotly.express.bar 。试验一下,看看你能想出什么。

编辑:

1)x-axis使用列独立设置Timeframe

2).groupby()与 上的平均功能一起使用value


推荐阅读