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