我有以下数据框:
Date Impressions Link_Clicks
2017-05-29 00-00-00 1,492,046 8,093
2017-06-05 00-00-00 845,012 4,864
2017-06-12 00-00-00 1,167,100 6,897
2017-06-19 00-00-00 895,781 4,472
2017-06-26 00-00-00 1,037,839 9,518
2017-07-03 00-00-00 1,139,060 9,668
2017-07-10 00-00-00 1,235,760 9,268
2017-07-17 00-00-00 1,200,906 7,989
2017-07-24 00-00-00 1,214,534 6,991
2017-07-31 00-00-00 1,434,225 7,311
2017-08-07 00-00-00 557,393 2,908
我正在尝试使用我已成功完成的Bokeh来实现这一点,但是在实现悬停工具时,它会返回特别划分为2的数字。这是一个错误吗?
使用的图书馆:
from bokeh.io import output_notebook, show, push_notebook
from bokeh.io import output_file, show, curdoc
output_notebook()
from bokeh.plotting import figure, ColumnDataSource
from bokeh.models import HoverTool, DatetimeTickFormatter, DataRange1d, CustomJS, Plot, LinearAxis, Grid
from bokeh.charts import Bar, BoxPlot, Donut, HeatMap, Histogram, Line, Scatter, TimeSeries
我的代码可以在下面找到:
source = ColumnDataSource(data=dict(
desc = bar_df.index,
y = bar_df["Link_Clicks"],
))
p = Bar(bar_df, label=bar_df.index, values="Link_Clicks", width=1, source=source, agg='sum',
line_color="white", plot_width=900, plot_height=400, bar_width=0.9, legend=None, toolbar_location="right")
p.add_tools(HoverTool(tooltips=[("Link_Clicks", "@y{1.11}"),
("Date", "@index")]))
p.xaxis.major_label_orientation = 45
show(p)
注意:如果您尝试复制此内容,则Bokeh的日期不能采用DateTime格式;只有字符串。
快速转换:df["Date"] = df["Date"].apply(lambda x: str(x).replace(':','-'))
当悬停时,你可以看到这完全被2划分,这很奇怪。我试过在ColumnDataSource和Hover工具中乘以y * 2,但仍然没有运气。
有什么想法吗?
答案 0 :(得分:0)
对于那些正在研究这个问题的人,我已经解决了这个问题,感谢toby指向了正确的方向。我尝试使用更简单的数据集,但它适用于我尝试过的所有内容。见下文:
数据:强>
bokeh_bar = df.groupby(["Audience"], as_index=False)["Impressions"].sum()
Index Audience Impressions
0 Core 23725548
1 Homepage 14163811
2 LAL_10% 18277859
3 LAL_3% 14879857
4 Page_1 4406266
<强>代码:强>
source = ColumnDataSource(data=dict(audience=list(bokeh_bar["Audience"]),
impressions=list(bokeh_bar["Impressions"]),
color=Spectral6))
p = figure(x_range=list(bokeh_bar["Audience"]), plot_width=900, plot_height=300, title="Impressions by Audience",
toolbar_location=None, tools="")
p.vbar(x='audience', top='impressions', width=0.9, color='color',
legend="audience", source=source)
p.add_tools(HoverTool(tooltips=[("Audience", "@audience"), ("Impressions", "@impressions")]))
p.xgrid.grid_line_color = None
p.legend.orientation = "horizontal"
p.legend.location = ('top_right')
p.legend.label_text_font_size = '8pt'
show(p)
<强>结果:强>
希望这有帮助。悬停工具也会返回正确的数字。