[英]Is it possible to format the labels using set_xticklabels in matplotlib?
為了設置軸對象的標簽,可以使用xticklabels
方法:
fig, ax = plt.subplots()
ax.imshow(np.eye(101))
labels = np.linspace(2, 4, 4)
ax.set_xticks([0, 33, 66, 100])
ax.set_xticklabels(labels)
這使:
也可以使用格式化程序格式化標簽:
fig, ax = plt.subplots()
labels = np.linspace(2, 4, 4)
ax.imshow(np.eye(101))
ax.set_xticks([0, 33, 66, 100])
ax.set_xticklabels(labels)
ax.xaxis.set_major_formatter(FormatStrFormatter('%.2f'))
但是格式化程序只使用刻度位置,而不是他的標簽:
解決方法是在使用set_xticklabels
之前手動格式化標簽:
fig, ax = plt.subplots()
labels = ["{0:.1f}".format(x) for x in np.linspace(2, 4, 4)]
ax.imshow(np.eye(101))
ax.set_xticks([0, 33, 66, 100])
ax.set_xticklabels(labels)
所以,有兩個問題:
set_xticklabels
函數時是否可以格式化為標簽? 例如,通過使用格式字符串。set_xticklabels
和Formatter之間的聯系是什么? Formatter 似乎根本沒有考慮set_xticklabels
,而是自己生成標簽。 設置 xticklabels 等同於使用FixedFormatter
。
ax.set_xticklabels(ticks)
是相同的
ax.xaxis.set_major_formatter(matplotlib.ticker.FixedFormatter(ticks))
(見源代碼)
如果您設置了刻度標簽,然后設置了格式化程序,它將簡單地覆蓋之前設置的刻度標簽。 反之亦然。
因為set_xticklabels
使用FixedFormatter
而不是例如FormatStrFormatter
,所以您需要自己格式化刻度標簽。 從這個意義上講,使用FormatStrFormatter
可能比使用預格式化列表更好。
還有另一種選擇,通過使用imshow
函數的extent
參數:如果您只想要一個自動位置和刻度格式,它會為您處理所有事情:
fig, ax = plt.subplots()
ax.imshow(np.eye(101), extent=[2, 4, 2, 4])
請注意按良好順序排列矩陣:使用extent
時,x 軸和 y 軸上的最小刻度值將始終位於左下角! (所以matrix[-1, 0]
)。
到目前為止(在 matplotlib 3.4.2 上測試)您還可以使用Formatter
的.format_ticks
方法。
ax.set_xticklabels(FormatStrFormatter('%.2f').format_ticks(ticks))
Formatter
在將刻度傳遞給set_xticklabels
之前格式化刻度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.