![](/img/trans.png)
[英]formatting the colorbar ticklabels with SymLogNorm normalization in matplotlib
[英]Align ticklabels in matplotlib colorbar
我有一個帶有正負值的顏色條,它們是自動生成的(我沒有設置它們)。 不幸的是,減號破壞了文本的垂直對齊。 如何將刻度標簽中的所有文本向右對齊,或者在我的正數之前插入一個空格以使其看起來不錯?
您可以更改文本的對齊方式。 可能需要稍微更改標簽的 (x) 位置以防止與顏色條本身重疊。
a = np.random.randn(10,10)
fig, ax = plt.subplots()
im = ax.imshow(a, interpolation='none')
cb = plt.colorbar(im)
for t in cb.ax.get_yticklabels():
t.set_horizontalalignment('right')
t.set_x(3.5)
我正要問同樣的問題,然后終於找到了你的問題。 所以我想添加我自己的解決方法。
起初,我使用了Rutger Kassies 給出的完全相同的解決方案。 但是,在ipython
繪圖時,在查看小窗口或將圖形設置為全屏時,相同數量的x
位置偏移將產生截然不同的結果。
我最終決定設置顏色條刻度標簽的pad
。
借用
公然竊取 Rutger 的示例代碼:
a = np.random.randn(10,10)
fig, ax = plt.subplots()
im = ax.imshow(a, interpolation='none')
cb = plt.colorbar(im)
ticklabs = cb.ax.get_yticklabels()
cb.ax.set_yticklabels(ticklabs,ha='right')
cb.ax.yaxis.set_tick_params(pad=45) # your number may vary
在跨各種窗口大小和方面使用時,此解決方法似乎提供了更加一致的結果。
這里有 4 個輸出來演示我的意思:頂行是位置偏移解決方案,底行是我的填充解決方案。 左邊是默認的圖形窗口大小,右側是savefig
彈出圖窗口,全屏后的蓋德:
創建顏色條時,使用格式選項最容易做到這一點。
import numpy as np
import matplotlib.pyplot as plt
a = np.random.randn(10,10)
fig, ax = plt.subplots()
im = ax.imshow(a, interpolation='none')
colorbar_format = '% 1.1f'
cb = plt.colorbar(im, format=colorbar_format)
所以基本上你使用Python“%”字符串格式。 https://pyformat.info/
如果你知道你有底片,請注意 % 后面的額外空間,它會為你“占位”,為正片添加一個空格,為負片添加一個空格。 您可能需要解決這個問題以使其最適合您的用例。 我還注意到,如果您沒有設置自己的刻度值:
cb = plt.colorbar(im, ticks=your_own_ticks, format=colorbar_format)
刻度的數量和分布可能會根據您使用的格式而變化。
如果您願意容忍較小的負號,那么這對我來說似乎很有效。
arr = np.random.randn(10,10)
fig, ax = plt.subplots()
im = ax.imshow(arr, interpolation=None)
cb = plt.colorbar(im)
def format_func(x, pos):
x = str(x)
pad = '' if x.startswith('-') else ' '
return '{}{}'.format(pad, x)
cb.ax.yaxis.major.formatter = mpl.ticker.FuncFormatter(format_func)
可以在此處找到 Tick Locator 和 Formatter 的文檔
我的猜測是,如果您切換到等寬字體,結果會更好。 主要優點是沒有手動設置pad
或x
值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.