散景次级y范围影响初级y范围

时间:2016-09-26 21:01:54

标签: python-3.x data-visualization bokeh

我正在使用bokeh.plotting构建一个散景图。我有两个系列,共享索引,我想绘制两个垂直条。当我使用单个条时一切正常,但是当我添加第二个y范围而第二个条似乎影响主要y范围(将值从0更改为4),而我的第二个vbar()覆盖第一个。任何协助为什么酒吧重叠而不是并排,以及为什么第二个系列/ y轴似乎影响第一个,即使它们是分开的,将不胜感激。

import pandas as pd
import bokeh.plotting as bp
from bokeh.models import NumeralTickFormatter, HoverTool, Range1d, LinearAxis

df_x_series = ['a','b','c']
fig = bp.figure(title='WIP',x_range=df_x_series,plot_width=1200,plot_height=600,toolbar_location='below',toolbar_sticky=False,tools=['reset','save'],active_scroll=None,active_drag=None,active_tap=None)
fig.title.align= 'center'
fig.extra_y_ranges = {'c_count':Range1d(start=0, end=10)}
fig.add_layout(LinearAxis(y_range_name='c_count'), 'right')
fig.vbar(bottom=0, top=[1,2,3], x=['a','b','c'], color='blue', legend='Amt', width=0.3, alpha=0.5)
fig.vbar(bottom=0, top=[5,7,8], x=['a','b','c'], color='green', legend='Ct', width=0.3, alpha=0.8, y_range_name='c_count')
fig.yaxis[0].formatter = NumeralTickFormatter(format='0.0')
bp.output_file('bar.html')
bp.show(fig)

bokeh plot

1 个答案:

答案 0 :(得分:3)

这是我认为你想要的情节: enter image description here

以下是代码:

import bokeh.plotting as bp
from bokeh.models import NumeralTickFormatter, Range1d, LinearAxis

df_x_series = ['a', 'b', 'c']
fig = bp.figure(
    title='WIP',
    x_range=df_x_series,
    y_range=Range1d(start=0, end=4),
    plot_width=1200, plot_height=600,
    toolbar_location='below',
    toolbar_sticky=False,
    tools=['reset', 'save'],
    active_scroll=None, active_drag=None, active_tap=None
)
fig.title.align = 'center'
fig.extra_y_ranges = {'c_count': Range1d(start=0, end=10)}
fig.add_layout(LinearAxis(y_range_name='c_count'), 'right')
fig.vbar(bottom=0, top=[1, 2, 3], x=['a:0.35', 'b:0.35', 'c:0.35'], color='blue', legend='Amt', width=0.3, alpha=0.5)
fig.vbar(bottom=0, top=[5, 7, 8], x=['a:0.65', 'b:0.65', 'c:0.65'], color='green', legend='Ct', width=0.3, alpha=0.8, y_range_name='c_count')
fig.yaxis[0].formatter = NumeralTickFormatter(format='0.0')
bp.output_file('bar.html')
bp.show(fig)

几点说明:

  • 分类轴目前在Bokeh中有点(咳嗽)丑陋。我们希望在未来几个月内解决这个问题。在冒号之后,每个都有0到1的刻度,允许你左右移动东西。所以我将第一个栏向左移动0.3 / 2,将第二个栏向右移动0.3 / 2(0.3因为那是你用过的宽度)
  • y_range已更改,因为您使用默认的y_range作为初始y_range,即DataRange1d。 DataRange使用绘图的所有数据来选择其值并添加一些填充,这就是为什么它从低于0开始并上升到新数据的最大值。通过在数字调用中手动指定范围,可以解决这个问题。

感谢您提供代码示例:D