关闭Bokeh中的刻度标记

17

我正在学习 Bokeh (0.6.1) 的教程,尝试在一个练习的散点图中关闭刻度线和标签,该散点图

from __future__ import division

import numpy as np
from six.moves import zip
from bokeh.plotting import *
from bokeh.objects import Range1d

output_file("scatter.html")

figure()

N = 4000

x = np.random.random(size=N) * 100
y = np.random.random(size=N) * 100
radii = np.random.random(size=N) * 1.5
colors = [
    "#%02x%02x%02x" % (r, g, 150) 
    for r, g in zip(np.floor(50+2*x), np.floor(30+2*y))
]

circle(x, y, radius=radii,
       fill_color=colors, fill_alpha=0.6,
       line_color=None, Title="Colorful Scatter")

grid().grid_line_color = None
axis().axis_line_color = None

# QUESTION PART 1: Is this the right way to turn off tick labels?
axis().major_label_text_font_size = '0pt'  
# QUESTION PART 2: ...and how to turn off tick marks also?

show()  # open a browser

我已经成功关闭了刻度标签,但是无论如何搜索文档和谷歌都没有揭示关闭刻度线所需的咒语。

我也不确定将axis().major_label_text_font_size设置为0pt是否是关闭刻度标签的正确方法,或者它是否是一个临时的解决方法。没有其他方法似乎能够起作用。

我是否忽略了一些显而易见的东西?

2个回答

28
这篇答案是针对较新版本的Bokeh 0.12.4进行更新。如需更多信息,请参阅 Bokeh文档 Styling Visual Attributes页面。要关闭主要和次要刻度线,请将它们的颜色设置为 None
p = bokeh.plotting.figure(plot_width=400, plot_height=400)
p.circle([1,2,3,4,5], [2,5,8,2,7], size=10)

p.xaxis.major_tick_line_color = None  # turn off x-axis major ticks
p.xaxis.minor_tick_line_color = None  # turn off x-axis minor ticks

p.yaxis.major_tick_line_color = None  # turn off y-axis major ticks
p.yaxis.minor_tick_line_color = None  # turn off y-axis minor ticks

如果要关闭刻度标签,请将字体大小设置为'0pt'

p.xaxis.major_label_text_font_size = '0pt'  # turn off x-axis tick labels
p.yaxis.major_label_text_font_size = '0pt'  # turn off y-axis tick labels

可以通过将字体颜色设置为“None”来实现类似的结果,但缺点是仍然会为刻度标签保留空间。
p.xaxis.major_label_text_color = None  # turn off x-axis tick labels leaving space
p.yaxis.major_label_text_color = None  # turn off y-axis tick labels leaving space 

这段代码示例演示了如何移除主要和次要刻度线以及刻度标签。
import bokeh.io
import bokeh.plotting
import bokeh.layouts
bokeh.io.output_file('remove_tick_marks.html')

p0 = bokeh.plotting.figure(plot_width=200, plot_height=200, 
                           x_axis_label='x', y_axis_label='y', 
                           title='original')
p0.circle([1,2,3,4,5], [2,5,8,2,7], size=10)

p1 = bokeh.plotting.figure(plot_width=200, plot_height=200, 
                           x_axis_label='x', y_axis_label='y', 
                           title='remove tick marks')
p1.circle([1,2,3,4,5], [2,5,8,2,7], size=10)
p1.xaxis.major_tick_line_color = None  # turn off x-axis major ticks
p1.xaxis.minor_tick_line_color = None  # turn off x-axis minor ticks
p1.yaxis.major_tick_line_color = None  # turn off y-axis major ticks
p1.yaxis.minor_tick_line_color = None  # turn off y-axis minor ticks

p2 = bokeh.plotting.figure(plot_width=200, plot_height=200, 
                           x_axis_label='x', y_axis_label='y', 
                           title='remove tick labels')
p2.circle([1,2,3,4,5], [2,5,8,2,7], size=10)
p2.xaxis.major_tick_line_color = None  # turn off x-axis major ticks
p2.xaxis.minor_tick_line_color = None  # turn off x-axis minor ticks
p2.yaxis.major_tick_line_color = None  # turn off y-axis major ticks
p2.yaxis.minor_tick_line_color = None  # turn off y-axis minor ticks
p2.xaxis.major_label_text_font_size = '0pt'  # preferred method for removing tick labels
p2.yaxis.major_label_text_font_size = '0pt'  # preferred method for removing tick labels

p3 = bokeh.plotting.figure(plot_width=200, plot_height=200, 
                           x_axis_label='x', y_axis_label='y', 
                           title='notice extra space')
p3.circle([1,2,3,4,5], [2,5,8,2,7], size=10)
p3.xaxis.major_tick_line_color = None  # turn off x-axis major ticks
p3.xaxis.minor_tick_line_color = None  # turn off x-axis minor ticks
p3.yaxis.major_tick_line_color = None  # turn off y-axis major ticks
p3.yaxis.minor_tick_line_color = None  # turn off y-axis minor ticks
p3.xaxis.major_label_text_color = None  #note that this leaves space between the axis and the axis label  
p3.yaxis.major_label_text_color = None  #note that this leaves space between the axis and the axis label  

grid = bokeh.layouts.gridplot([[p0, p1, p2, p3]])
bokeh.io.show(grid)

enter image description here


1
对我来说并没有完全奏效。当我将SVG转换为PDF时,Adobe Acrobat出现了问题。经过调查,发现刻度和标签并没有消失,而Adobe Acrobat会按照自己的方式进行渲染(可能有一些最小字体大小限制)。 - Dmytro Bogatov

6

我不确定一周内没有回答是因为人们不知道还是因为这个问题被忽视了,因为它太明显了。

无论如何,希望其他人可能会发现它有用,我发布这个答案。我找到了一种做法,看起来很像一个黑客,我只是希望有人能改进它...

from __future__ import division

import numpy as np
from six.moves import zip
from bokeh.plotting import *

output_file("scatter.html")

figure()

N = 4000

x = np.random.random(size=N) * 100
y = np.random.random(size=N) * 100
radii = np.random.random(size=N) * 1.5
colors = ["#%02x%02x%02x" % (r, g, 150) 
          for r, g in zip(np.floor(50+2*x), np.floor(30+2*y))]

circle(x, y, radius=radii,
       fill_color=colors, fill_alpha=0.6,
       line_color=None, Title="Colorful Scatter")

grid().grid_line_color = None
axis().axis_line_color = None
curplot().outline_line_color = None

# Turn off tick labels
axis().major_label_text_font_size = '0pt'  
# Turn off tick marks 
axis().major_tick_line_color = None  # turn off major ticks
axis()[0].ticker.num_minor_ticks = 0  # turn off minor ticks
axis()[1].ticker.num_minor_ticks = 0

show()  # open a browser

不,这可能是目前最好的方法。我们可能可以向“figure”添加另一个关键字参数,但这是一种平衡行为,既要增加便利性,又要避免“参数汤”。如果您有改进拼写等方面的建议,我鼓励您在Bokeh GH问题跟踪器上提交它们,这样的输入总是受欢迎的。 - bigreddot
尽管如此,您还应该能够设置major_label_text_font_color = None,同样可以删除主要标签。我认为这是我的首选,而不是设置字体大小,但我会承认它们之间几乎没有什么区别。 - bigreddot
感谢@bigreddot,很让人放心地看到我没有错过什么。我习惯于大量使用ggplot2,并期望找到一个简单的开关,就像http://www.cookbook-r.com/Graphs/Axes_(ggplot2)/中所示。但是我对这个临时解决方法感到满意,如果有有用的建议,我会考虑提交问题报告。 - daedalus
我认为该属性称为major_label_text_color(不带font)。在我看来,gauden去除标签的方法具有优点,即字体大小为0pt的标签不再占用空间,而将颜色设置为“无”的标签仍会影响边距宽度。 - Jake
是否可以仅关闭一个轴的主要标签文本颜色,而不是两个轴的? - Francisco Vargas
不确定这是否可能...请考虑将其作为单独的问题提出。 - daedalus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接