Holoviews 是否能够在图中用 0 填充缺失的日期?
Is Holoviews able to fill missing dates with 0 in plot?
我有一个简单的条形图,其中聚合时间序列数据作为值。 x 轴上的变量被格式化为 Datetime 并由 Holoviews 正确解释。 Y 轴显示一天中观察到的事件的聚合计数。
是否可以向 Holoviews 添加一个选项,这将为不属于观察数据的缺失日期留下 "empty bars"?因为在那个特定的日子里没有任何事件。根据我的截图,2017-06-23 和 2017-06-25 到 2017-06-28 应该出现高度为零的条。
条形图用于绘制分类数据(类别不多)
您有时间戳,因此通常线图或散点图更适合绘制较长的时间段。
这里有 2 种条形图的可能解决方案:
1) 您可以 使用 .redim.values() 来指定您希望在您的x 轴:
import pandas as pd
import hvplot.pandas
import holoviews as hv
from holoviews import opts
hv.extension('bokeh')
df = pd.DataFrame({
'dates': [pd.Timestamp(2020, 1, 1), pd.Timestamp(2020, 1, 3)],
'values': [30, 10],
})
# specify which categories you would like to show
# if you need a long list, better use a for loop to generate list
new_date_values = [
pd.Timestamp(2020, 1, 1),
pd.Timestamp(2020, 1, 2),
pd.Timestamp(2020, 1, 3),
]
# use redim.values() to specify which categories you would like to show
bar_plot = hv.Bars(df)
bar_plot.redim.values(dates=new_date_values)
2) 但也许 更简单的是修改你的 df:
* 将日期设置为数据框的索引 和
* 然后从 pandas.
做 df.asfreq('D')
Asfreq('D') 确保每个日期都会出现在您的索引中。
# set dates as your index and use .asfreq('D)
df = df.set_index('dates').asfreq('D')
bar_plot = hv.Bars(df)
bar_plot
结果图:
我有一个简单的条形图,其中聚合时间序列数据作为值。 x 轴上的变量被格式化为 Datetime 并由 Holoviews 正确解释。 Y 轴显示一天中观察到的事件的聚合计数。
是否可以向 Holoviews 添加一个选项,这将为不属于观察数据的缺失日期留下 "empty bars"?因为在那个特定的日子里没有任何事件。根据我的截图,2017-06-23 和 2017-06-25 到 2017-06-28 应该出现高度为零的条。
条形图用于绘制分类数据(类别不多)
您有时间戳,因此通常线图或散点图更适合绘制较长的时间段。
这里有 2 种条形图的可能解决方案:
1) 您可以 使用 .redim.values() 来指定您希望在您的x 轴:
import pandas as pd
import hvplot.pandas
import holoviews as hv
from holoviews import opts
hv.extension('bokeh')
df = pd.DataFrame({
'dates': [pd.Timestamp(2020, 1, 1), pd.Timestamp(2020, 1, 3)],
'values': [30, 10],
})
# specify which categories you would like to show
# if you need a long list, better use a for loop to generate list
new_date_values = [
pd.Timestamp(2020, 1, 1),
pd.Timestamp(2020, 1, 2),
pd.Timestamp(2020, 1, 3),
]
# use redim.values() to specify which categories you would like to show
bar_plot = hv.Bars(df)
bar_plot.redim.values(dates=new_date_values)
2) 但也许 更简单的是修改你的 df:
* 将日期设置为数据框的索引 和
* 然后从 pandas.
做 df.asfreq('D')
Asfreq('D') 确保每个日期都会出现在您的索引中。
# set dates as your index and use .asfreq('D)
df = df.set_index('dates').asfreq('D')
bar_plot = hv.Bars(df)
bar_plot
结果图: