在绘图上标记刻度位置时,是否有任何标准解决方案来放置刻度标记?我查看了Matplotlib的MaxNLocator(https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/ticker.py#L1212)但是并不是很清楚所有不同的选项是做什么的,或者基本的滴答位置需要哪些选项。
有人可以为简单的刻度定位功能提供伪代码吗?
答案 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))