在matplotlib中更改刻度的capstyle

时间:2015-09-12 14:21:36

标签: python matplotlib

我想用圆形帽子来打勾。我尝试了以下方法,但它不起作用。

import matplotlib.pyplot as plt   
# better tick visiblity to check the capstyle
plt.rcParams.update({
           'figure.dpi': 150,
          u'xtick.major.size': 5.0,
          u'xtick.major.width': 2,
          })

fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4])

tl = ax.xaxis.get_ticklines()    
for i in tl:
    i.set_solid_capstyle('round')
plt.show()

1 个答案:

答案 0 :(得分:2)

所以,这不起作用的原因是刻度线是用单点线实现的,刻度线绘制为标记

In [127]: [i.get_linestyle() for i in ax.xaxis.get_ticklines()]
Out[127]: 
['None',
 'None',
 'None',
 'None',
 'None',
 'None',
 'None',
 'None',
 'None',
 'None',
 'None',
 'None',
 'None',
 'None']

In [128]: [i.get_marker() for i in ax.xaxis.get_ticklines()]
Out[128]: [2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3]

请参阅docs了解整数之间的映射 - >形状,这是交替'滴答'和'滴答'。

这可以让你做半生可爱的事情,比如

[i.set_marker('o') for i in ax.xaxis.get_ticklines()]

给出了circles as ticks

如果你使用它,当上游中断时,这将是你的问题

为了得到你想要的东西,你可以做到很好地进入胆量并在刻度线上设置capstyle:

for i in ax.xaxis.get_ticklines():
    # reach in and poke the guts 
    # USE AT YOUR OWN RISK
    i._marker._capstyle = 'round' 
    # this is not officially supported

请注意,这不会使用1,但是2个私有属性和 会被明年推出的traitlet重构(针对v2.1)打破。这也将被重新设置为'butt' _recache次调用的transition的硬编码值(当我被调用时,我不记得我的头顶。)

我认为你真的不想这样做:

round cap ticks

因为它绕着蜱的两端,而不仅仅是指向的一侧(但是可能是一个较小的蜱尺寸,圆形的“外侧”将被脊柱隐藏)