3 回答
TA贡献1820条经验 获得超2个赞
一种方法是使用较小的刻度线。这个想法是,您可以设置次要刻度线,使其位于主要刻度线之间的中间位置,然后手动指定标签。
例如:
import matplotlib.ticker as ticker
# a is an axes object, e.g. from figure.get_axes()
# Hide major tick labels
a.xaxis.set_major_formatter(ticker.NullFormatter())
# Customize minor tick labels
a.xaxis.set_minor_locator(ticker.FixedLocator([1.5,2.5,3.5,4.5,5.5]))
a.xaxis.set_minor_formatter(ticker.FixedFormatter(['1','2','3','4','5']))
三行:
“隐藏”主要刻度线上的1,2,3,4,...
在主要刻度之间的中间设置次要刻度(假设您的主要刻度为1,2,3 ...)
手动指定小刻度线的标签。在此,图中的“ 1”将介于1.0和2.0之间。
这只是一个简单的例子。您可能希望通过循环填充列表或其他方式来简化它。
您还可以尝试其他定位器或格式化程序。
编辑:或者,如注释中所建议:
# Hide major tick labels
a.set_xticklabels('')
# Customize minor tick labels
a.set_xticks([1.5,2.5,3.5,4.5,5.5], minor=True)
a.set_xticklabels(['1','2','3','4','5'], minor=True)
TA贡献1821条经验 获得超6个赞
这是使用定位器和格式化程序的替代方法。它可以用于标签之间的任何间距:
# tick_limit: the last tick position without centering (16 in your example)
# offset: how many steps between each tick (1 in your example)
# myticklabels: string labels, optional (range(1,16) in your example)
# need to set limits so the following works:
ax.xaxis.set_ticks([0, tick_limit])
# offset all ticks between limits:
ax.xaxis.set(ticks=np.arange(offset/2., tick_limit, offset), ticklabels=myticklabels)
# turn off grid
ax.grid(False)
由于这会修改主要刻度线,因此可能必须调整网格-取决于应用程序。也可以使用ax.twinx())解决此问题。这将导致在单独轴的相反侧上移动标签,但将保持原始网格不变,并提供两个网格,一个用于原始刻度,一个用于偏移。
编辑:
假设整数刻度线等距分布,这可能是最简单的方法:
ax.set_xticks([float(n)+0.5 for n in ax.get_xticks()])
添加回答
举报