散景绘制第二轴 - 如何获得主轴的限制?

bokeh plotting second axis - how to get limits of primary axis?

我有一个散景图,x 轴上有日期 (data["obs_date"]),我希望顶部的另一个 x 轴覆盖相同的范围,但以不同的格式显示 (mjd下面)。

我尝试添加第二个轴:

plot.extra_x_ranges = {"MJD":
                           Range1d(start=Time(min(data["obs_date"])).mjd,
                                   end=Time(max(data["obs_date"])).mjd)}
plot.add_layout(LinearAxis(x_range_name="MJD", axis_label="MJD",
                               axis_label_text_font_size="16pt"),
                               "above")

但是,因为散景在图的限制中添加了一个小缓冲区,使用 min max of data["obs_date"] 作为这个新轴的限制给了我一个小的偏移量 -在下图中,16 Jan 2018 应与 58134 对齐。当我只有一个点可以绘制时,它也会导致它中断。

如何设置新轴的范围,使其等于主轴范围的 'aware'?来自 matplotlib 背景,我想我正在寻找的等价物是 ax.get_xlim().

Bokeh 隐式使用 DataRange1d,它根据其 range_paddingrange_padding_unitsfollow_interval 字段计算填充边界,以及基础比例是线性还是对数.但它不存储计算值。

因此,此时您唯一的选择是为两个范围明确设置边界,或者根据上述 DataRange1d 字段和比例类型计算额外范围的边界。