2

在绘图上标记刻度位置时,是否有关于如何放置刻度标记的标准解决方案?我查看了 Matplotlib 的 MaxNLocator (https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/ticker.py#L1212),但目前还不清楚所有不同选项的作用,或者其中哪些是必要的用于基本刻度放置。

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

4

1 回答 1

4

我认为在绘图上放置刻度的经验法则是使用 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))
于 2013-10-29T13:49:04.180 回答