Bokek悬停工具显示不正确|蟒

时间:2018-05-22 07:00:19

标签: python graph data-visualization bokeh

我有以下数据框:

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(':','-'))

enter image description here

当悬停时,你可以看到这完全被2划分,这很奇怪。我试过在ColumnDataSource和Hover工具中乘以y * 2,但仍然没有运气。

有什么想法吗?

1 个答案:

答案 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)

<强>结果:

enter image description here

希望这有帮助。悬停工具也会返回正确的数字。