【问题标题】:Minor ticks with only major tick labels are shown仅显示主要刻度标签的次要刻度
【发布时间】:2013-08-27 14:11:34
【问题描述】:

我想在轴上有次要刻度,但只显示主要刻度标签。例如,次要刻度是 [19, 20, 21, ... 40, 41],主要刻度标签是 [20, 25, 30, 35, 40]。我该怎么做?下面的代码没有完成这项工作。我知道可以使用 MultipleLocator、FormatStrFormatter,例如 this example。但是,我在轴上的值有点“奇怪”,起始值为 19(不是 20),结束值为 41,这在使用 MultipleLocator 时会造成困难。

import numpy as np
from matplotlib import pylab as plt

fig = plt.figure()
ax = fig.add_subplot(111)
x = np.linspace(19.,41,23)
y = x**2
ax.plot(x,y)
ax.set_xticks(x)
ax.set_xticklabels(x, minor=False)
plt.show()

它给了我以下情节:

ax.set_xticklabels([20, 25, 30, 35, 40], minor=False) 给我另一个情节: 我怎样才能改变我的代码来得到我需要的东西。非常感谢您的帮助!

【问题讨论】:

  • 使用FixedLocatorset_xticksset_xticklabels 很危险,应该很少使用。

标签: python matplotlib labels


【解决方案1】:

我真的不明白为什么在你的例子中使用MultipleLocator 很困难。

通过在代码中添加这些行

from matplotlib.ticker import MultipleLocator, FormatStrFormatter

majorLocator   = MultipleLocator(5)
majorFormatter = FormatStrFormatter('%d')
minorLocator   = MultipleLocator(1)

ax.xaxis.set_major_locator(majorLocator)
ax.xaxis.set_major_formatter(majorFormatter)
ax.xaxis.set_minor_locator(minorLocator)

你会得到这张图片,我知道这是你想要的(不是吗?):


如果您不希望刻度显示在您的数据范围下方,请使用 FixedLocator 手动定义刻度:

from matplotlib.ticker import FixedLocator

majorLocator   = FixedLocator(np.linspace(20,40,5))
minorLocator   = FixedLocator(np.linspace(19,41,23))

你会得到这个图像:

【讨论】:

  • 是的,第二种解决方案正是我想要的。非常感谢!
  • 很棒的答案,以及对定位器的精彩介绍。遇到此问题的任何人的另一个注意事项:使用ax.set_xticksax.set_yticks 会将主要刻度定位器更改为FixedLocator,这可能是一种更简单的方法。 然而,我想因为它不常见,没有ax.set_xminorticksax.set_yminorticks... 来手动选择次要刻度,它们必须像本文中那样设置为FixedLocator。跨度>
猜你喜欢
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
  • 2013-07-17
  • 2015-09-02
  • 2017-02-27
  • 1970-01-01
相关资源
最近更新 更多