3 回答

TA貢獻1820條經(jīng)驗 獲得超2個贊
一種方法是使用較小的刻度線。這個想法是,您可以設(shè)置次要刻度線,使其位于主要刻度線之間的中間位置,然后手動指定標(biāo)簽。
例如:
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,...
在主要刻度之間的中間設(shè)置次要刻度(假設(shè)您的主要刻度為1,2,3 ...)
手動指定小刻度線的標(biāo)簽。在此,圖中的“ 1”將介于1.0和2.0之間。
這只是一個簡單的例子。您可能希望通過循環(huán)填充列表或其他方式來簡化它。
您還可以嘗試其他定位器或格式化程序。
編輯:或者,如注釋中所建議:
# 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條經(jīng)驗 獲得超6個贊
這是使用定位器和格式化程序的替代方法。它可以用于標(biāo)簽之間的任何間距:
# 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)
由于這會修改主要刻度線,因此可能必須調(diào)整網(wǎng)格-取決于應(yīng)用程序。也可以使用ax.twinx())解決此問題。這將導(dǎo)致在單獨軸的相反側(cè)上移動標(biāo)簽,但將保持原始網(wǎng)格不變,并提供兩個網(wǎng)格,一個用于原始刻度,一個用于偏移。
編輯:
假設(shè)整數(shù)刻度線等距分布,這可能是最簡單的方法:
ax.set_xticks([float(n)+0.5 for n in ax.get_xticks()])
添加回答
舉報