gpt4 book ai didi

python - Bokeh 中带有浮点刻度值的自定义刻度标签

转载 作者:行者123 更新时间:2023-12-01 01:16:22 25 4
gpt4 key购买 nike

我想在 Bokeh 中制作“Weibull paper ”,这需要我在 y 轴上进行自定义转换并添加适当的 y 轴标签。

我正在按照此 stackoverflow 问题的已接受答案中的说明进行操作:How do I use custom labels for ticks in 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 值。

Picture of Bokeh plot showing weird y-axis labelling

我猜测这与 float 的公差或其他东西有关,字典中的刻度与绘图上的刻度不完全匹配。如果可以解决这个问题,我可以对值进行稍微舍入,但我不确定我可以做到什么程度并让它发挥作用。

有什么解决方法的建议吗?

最佳答案

正如我在对另一个答案的评论中提到的,问题中的行为仅发生在我的工作计算机上,而不是发生在我的家用计算机上。我还没弄清楚是浏览器的问题,还是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 才能修复这两个错误。我不知道这个解决方案有多通用,即它是否适用于任意 float ,但它解决了我当前的问题。

关于python - Bokeh 中带有浮点刻度值的自定义刻度标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com