簡體   English   中英

在 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 的文檔

我的猜測是,如果您切換到等寬字體,結果會更好。 主要優點是沒有手動設置padx值。

我還不夠酷來嵌入圖像,所以如果你有興趣在這里看到輸出,它是默認大小,在最大化.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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