散景-例如在缩放时如何在X范围变化时自动缩放Y轴?

时间:2019-08-31 14:03:21

标签: bokeh

使用散景效果,例如,在发生缩放事件后,我希望获得一些帮助来将Y轴坐标图缩放为X范围的函数。想法是要有许多绘图条,例如显示随时间变化的电动机电流。当缩放一个条带的特定X范围时,所有其他条带将缩放到相同的X范围,并在其Y轴上缩放其数据以适合此范围。对于给定的时间窗口(从用户缩放),所有图都将放大。我使用matplotlib进行此自动缩放,现在我希望在Bokeh中具有相同的缩放比例。我已经复制了matplotlib代码,希望可以澄清一下。我想有了Bokeh,我将不得不:

  • 在多个绘图条上链接x范围
  • 在x_range的更改事件上调用带有回调的JavaScript,例如fig.x_range.callback = CustomJS(...

但是就我所知。我还不太了解如何访问计算所有图的比例所需的所有参数。我是Bokeh和JS的新手,因此必须经历学习过程。但是,如果有人已经对如何进行有一个好主意,那将会很有帮助。同时,我将继续进行一些初步的编码。

import math
from matplotlib import pyplot as plt
from matplotlib import ticker as ticker
import numpy as np

def rescale_y(ax):
    setmargin = 0.05
    xmin, xmax = ax.get_xlim()
    axes = ax.figure.get_axes()
    for axis in axes:
        lines = axis.get_lines()
        ylo = math.inf
        yhi = -math.inf
        for line in lines:
            x, y = line.get_data()
            cond = (x >= xmin) & (x <= xmax)
            yrest = y[cond]
            margin = (yrest.max()-yrest.min())*setmargin
            new_ylo = yrest.min()-margin
            new_yhi = yrest.max()+margin
            if new_ylo < ylo: ylo = new_ylo
            if new_yhi > yhi: yhi = new_yhi
        axis.set_ylim(ylo,yhi)
        axis.figure.canvas.draw()


# Prepare dummy data to plot
x = np.arange(0,100)
y1 = x
y2 = np.power(x, 2)
y3 = x + 10

# Prepare plots
fig, ax = plt.subplots( 2, 1, squeeze=False, sharex='col' )
#plt.subplots_adjust( hspace=0.05, left=0.05, right=0.99, top=0.95, bottom=0.05 )
fig.suptitle( 'my example' )
ax[0,0].plot( x, y1, c='blue', linewidth=1, label='plot 1')         
ax[0,0].plot( x, y2, c='red', linewidth=1, label='plot 2')          
ax[1,0].plot( x, y3, c='green', linewidth=1, label='plot 3')            

# Set callbacks on xlim changed
axes = fig.get_axes()
for i in axes:
    i.callbacks.connect('xlim_changed', rescale_y)

# Display plots
plt.show()

0 个答案:

没有答案