Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 只显示带有主刻度标签的小刻度_Python_Matplotlib_Labels - Fatal编程技术网

Python 只显示带有主刻度标签的小刻度

Python 只显示带有主刻度标签的小刻度,python,matplotlib,labels,Python,Matplotlib,Labels,我希望轴上有小刻度,但只显示大刻度标签。例如,次要记号是[19,20,21,…40,41],主要记号标签是[20,25,30,35,40]。我怎么做?下面的代码不起作用。我知道人们可以使用多路传输器,比如格式化程序。然而,我在轴上的值有点“奇怪”,起始值是19(不是20),结束值是41,这在使用MultipleLocator时会造成困难 import numpy as np from matplotlib import pylab as plt fig = plt.figure() ax =

我希望轴上有小刻度,但只显示大刻度标签。例如,次要记号是[19,20,21,…40,41],主要记号标签是[20,25,30,35,40]。我怎么做?下面的代码不起作用。我知道人们可以使用多路传输器,比如格式化程序。然而,我在轴上的值有点“奇怪”,起始值是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.setxticklabels([20,25,30,35,40],minor=False)
再给我一个情节:
如何更改代码以获得所需的内容。非常感谢你的帮助

我真的不明白为什么在您的示例中很难使用
多路扩音器

通过在代码中添加这些行

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))
您将获得以下图像:

使用
固定定位器
setxticks
setxticklabel
是危险的,应该很少使用。是的,第二种解决方案正是我想要的。非常感谢你!很棒的答案,以及定位器的精彩介绍。任何人遇到这种情况都要注意:使用
ax.set\xticks
ax.set\yticks
会将主刻度定位器更改为
FixedLocator
,这可能是一种更简单的方法。但是,我想,因为它不常见,所以没有
ax.set\u xminorticks
ax.set\u yminorticks
。。。要手动拾取次要记号,必须使用
FixedLocator
设置它们,如本文所述。