簡體   English   中英

是否可以在 matplotlib 中使用 set_xticklabels 格式化標簽?

[英]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)

這使:

1個

也可以使用格式化程序格式化標簽:

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'))

但是格式化程序只使用刻度位置,而不是他的標簽:

2個

解決方法是在使用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)

3個

所以,有兩個問題:

  1. 使用set_xticklabels函數時是否可以格式化為標簽? 例如,通過使用格式字符串。
  2. set_xticklabelsFormatter之間的聯系是什么? 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])

1個

請注意按良好順序排列矩陣:使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM