我试图制作一个图表,我有一些问题注解它。
我的图在x轴上有一个对数刻度,显示时间。我希望能够做的是保持现有的(但不可预测)100个单位、1000个单位、10000个单位等的数字刻度标签,但也可以向x轴添加自定义刻度标签,使其清楚地显示更多“人类可读”的时间间隔-例如,我希望能够标记“一周”,“一个月”、“6个月”等。
我可以使用matplotlib.pyplot.annotate()来标记点,但它并没有真正做到我想要的。我真的不想在我的图表上添加文本和箭头,我只是想添加一些额外的自定义刻度线。有什么想法吗?
4条答案
按热度按时间9avjhtql1#
如果你真的想添加额外的刻度,你可以使用
axis.xaxis.get_majorticklocs()
获取现有的刻度,添加任何你想添加的刻度,然后使用axis.xaxis.set_ticks(<your updated array>)
设置刻度。另一种方法是使用
axvline
添加垂直线。优点是您不必担心将自定义tick插入到现有数组中,但您必须手动注解行。另一种方法是添加一个带有自定义刻度的链接轴。
snz8szmq2#
来自http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.xticks:
因此,您需要做的就是获得
locs
和labels
,然后根据您的喜好修改labels
(虚拟示例):然后运行:
yhxst69z3#
这是我的解决方案。主要优点是:
代码:
alen0pnh4#
我喜欢Miguel上面的回答。工作得很好。然而,必须做一个小的调整。以下是:
必须更改为
因为,在Python 2.7+/3中,Dict.keys()和Dict.values()返回dict_keys和dict_values对象,matplotlib不喜欢(显然)。更多关于PEP 3106中的这两个对象。