是否有标准方法为图中的轴选择刻度位置?

时间:2013-10-29 02:56:34

标签: user-interface matplotlib plot

在绘图上标记刻度位置时,是否有任何标准解决方案来放置刻度标记?我查看了Matplotlib的MaxNLocator(https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/ticker.py#L1212)但是并不是很清楚所有不同的选项是做什么的,或者基本的滴答位置需要哪些选项。

有人可以为简单的刻度定位功能提供伪代码吗?

1 个答案:

答案 0 :(得分:3)

我认为在情节上放置刻度的经验法则是使用1,2,5和10的倍数。根据我的经验,matplotlib似乎遵守这一点。如果您有理由偏离默认刻度,我认为设置它们的最简单方法是对特定轴使用set_ticks()方法。相关文档在此处:http://matplotlib.org/api/axis_api.html

实施例

import numpy as np
import matplotlib.pyplot as plt
ax = plt.subplot()                        # create axes to plot into
foo = np.array([0, 4, 12, 13, 18, 22])    # awkwardly spaced data
bar = np.random.rand(6)                   # random bar heights
plt.bar(foo, bar)                         # bar chart
ax.xaxis.get_ticklocs()                   # check tick locations -- currently array([  0.,   5.,  10.,  15.,  20.,  25.])

ax.xaxis.set_ticks(foo)                   # set the ticks to be right at each bar
ax.xaxis.get_ticklocs()                   # array([ 0,  4, 12, 13, 18, 22]) 
plt.draw()

ax.xaxis.set_ticks([0, 10, 20])           # minimal set of ticks
ax.xaxis.get_ticklocs()                   # array([ 0, 10, 20])
plt.draw()

在我的示例中的三个选项中,我将保留此情况下的默认行为;但有时我会覆盖默认值。例如,另一个经验法则是我们应该最小化我们的图中不是数据(即标记和线)的墨水量。因此,如果默认的刻度设置为[0, 1, 2, 3, 4, 5, 6],我可能会将其更改为[0, 2, 4, 6],因为这样可以减少绘图滴答的墨水而不会失去清晰度。

修改[0, 10, 20]的刻度线也可以使用定位器完成,如评论中所示。例子:

ax.xaxis.set_major_locator(plt.FixedLocator([0,10,20]))
ax.xaxis.set_major_locator(plt.MultipleLocator(base=10))
ax.xaxis.set_major_locator(plt.MaxNLocator(nbins=3))