繁体   English   中英

散景中具有浮点刻度值的自定义刻度标签

[英]Custom tick labels in Bokeh with floating point tick values

我想在Bokeh中制作“ 威布尔纸 ”,这需要我在y轴上执行自定义转换并添加适当的y轴标签。

我正在按照对此stackoverflow问题的可接受答案中的说明进行操作: 如何在Bokeh中使用自定义标签作为刻度线?

这是我的代码的相关五行:

yticks = np.array([1, 5, 10, 50, 99])
ytick_loc = np.log(np.log(1 / (1 - yticks/100)))
fig.yaxis.ticker = ytick_loc
tick_labels = [str(ytick) for ytick in yticks]
fig.yaxis.major_label_overrides = dict(zip(ytick_loc, tick_labels))

我所期望的是:在该图上有5个滴答,带有标签“ 1”,“ 5”,“ 10”,“ 50”和“ 99”。

我得到的是:在情节上打了5个勾,分别带有标签“ 1”,“-2.97”,“ 10”,“-0.367”和“ 99”。 因此,有些标签随我的需要而改变,有些则保持在其y值。

散景图的图片显示了奇怪的y轴标签

我猜想这与浮点数的公差有关,或者与字典中的刻度不完全匹配图上的刻度有关。 如果可以解决这个问题,我会略微四舍五入值,但是我不确定我可以做到什么并使其起作用。

有任何解决方法的建议吗?

我尝试了您的代码,但无法重现您的问题。 我正在使用Bokeh 1.0.4。

在此处输入图片说明

from bokeh.io import output_file, show
from bokeh.plotting import figure
import numpy as np

fig = figure()
fig.circle(x=[5,5,5,5,5], y=[-10,-5,0,1,2], size=10)

yticks = np.array([1, 5, 10, 50, 99])
ytick_loc = np.log(np.log(1 / (1 - yticks/100)))
fig.yaxis.ticker = ytick_loc
tick_labels = [str(ytick) for ytick in yticks]
fig.yaxis.major_label_overrides = dict(zip(ytick_loc, tick_labels))

output_file("test.html")

show(fig)

正如我在对其他答案的评论中提到的那样,问题中的行为仅发生在我的工作计算机上,而不发生在我的家用计算机上。 我还没有弄清楚它是浏览器,python版本还是其他一些库,但是它不是Bokeh版本。

以下代码没有问题:

from bokeh.io import output_file, show
from bokeh.plotting import figure
import numpy as np

fig = figure()
fig.circle(x=[5,5,5,5,5], y=[-10,-5,0,1,2], size=10)

yticks = np.array([1, 5, 10, 50, 99])
ytick_loc = np.log(np.log(1 / (1 - yticks/100)))
ytick_loc = np.around(ytick_loc, 15)
fig.yaxis.ticker = ytick_loc
tick_labels = [str(ytick) for ytick in yticks]
fig.yaxis.major_label_overrides = dict(zip(ytick_loc, tick_labels))

output_file("test.html")

show(fig)

我添加的特定行是:

ytick_loc = np.around(ytick_loc, 15)

我会注意到,四舍五入到16位数字足以修复两个带有错误的刻度线之一,但是四舍五入到15位才能修复两个刻度。 我不知道这有多通用的解决方案,也就是说,它是否适用于任意浮点数,但是它解决了我当前的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM