python - 带有 DataRange1d 的 Bokeh 双轴不能很好地缩放

标签 python data-visualization bokeh

我想在双轴图上绘制一些数据,我在文档中找到了 example ,但我需要动态范围 (DataRange1d),因为我的数据在可视化过程中会发生变化,而且我事先不知道它会是什么。

我的问题:两个 y 范围具有相同的缩放比例,并且被锁定在一起:我不能只缩小一个范围。

from numpy import pi, arange, sin, linspace
from bokeh.plotting import show
from bokeh.models import LinearAxis, Range1d, DataRange1d
from bokeh.models import Plot, Title, PanTool, WheelZoomTool
from bokeh.models import Circle, ColumnDataSource

# get some data
x = arange(-2*pi, 2*pi, 0.1)
y = sin(x)
y2 = linspace(0, 100, len(y))

# configure plot
p = Plot(title = Title(text="Titre"), x_range = DataRange1d(), y_range = DataRange1d())
p.add_tools(PanTool(), WheelZoomTool())
p.add_layout(LinearAxis(), "below")
p.add_layout(LinearAxis(), "left")

# add extra y range
p.extra_y_ranges = {"foo": DataRange1d()}
p.add_layout(LinearAxis(y_range_name="foo"), 'right')

# plot using both axes
cds = ColumnDataSource(data=dict(x=x, y=y, y2=y2))
c1 = Circle(x="x", y="y", line_color="red", fill_color="red")
p.add_glyph(cds, c1)
c2 = Circle(x="x", y="y2", line_color="blue", fill_color="blue")
p.add_glyph(cds, c2, y_range_name="foo")

show(p)

bokeh plot

最佳答案

默认情况下,DataRange1d 使用所有渲染器计算其开始和结束。但是您可以指定要使用的渲染器:

[...]

c1 = Circle(x="x", y="y", line_color="red", fill_color="red")
c1_renderer = p.add_glyph(cds, c1)
p.y_range.renderers = [c1_renderer]

c2 = Circle(x="x", y="y2", line_color="blue", fill_color="blue")
c2_renderer = p.add_glyph(cds, c2, y_range_name="foo")
p.extra_y_ranges['foo'].renderers = [c2_renderer]

[...]

关于python - 带有 DataRange1d 的 Bokeh 双轴不能很好地缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48631530/

相关文章:

r - R 中二次方程的等高线图

javascript - 从百分比设置特定梯度

python - Python 中的列表

python - OSMnx - 示例文件的问题

python - 使用 numpy.loadtxt 加载包含 float 和字符串的文本文件

python - 在 Bokeh 0.5.0 中,无法指定图表的大小,并且以前的版本出现在同一个输出文件中

html - 将带有小部件的交互式 Bokeh 图导出到独立的 HTML

python - Bokeh - 当 output_backend = "webgl"时,绘图在 x 轴上重叠

python - 如何设置Django包开发环境?

python - 在给定一组坐标的情况下计算曲线下的面积,而不知道函数