簡體   English   中英

將任意 colors 分配給 python matplotlib 中的值

[英]Assigning arbitrary colors to values in python matplotlib

我在 python 中有一個二維浮點數數組,只有 8 個可能的值,我輸入到一個方形網格中,顏色為 plot,它代表數組的值。 我只知道通過interpolation=nearest分配不同的 colors ,但是由於我的值可能相似,因此要獲得清晰的圖像需要更改數組中的值以使它們足夠不同。

有沒有一種方法可以給定變量

val1,...,val8

我可以選擇這個值將與 8 個任意 colors 一起出現?

您可以使用np.unique(..., return_inverse=True)來獲取所有唯一值和倒數。 該逆向為每個輸入值提供了唯一值列表中的相應索引。 逆是一維數組,需要再次進行二維。 請注意,唯一值數組將從低到高排序。

然后,您可以例如使用 seaborns heatmap 來繪制熱圖。 可選地與帶注釋的值和/或顏色條一起使用。 (你可以直接用 matplotlib 做類似的事情)。

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import numpy as np
import seaborn as sns

input_values = np.random.rand(8)  # 8 different values
m = np.random.choice(input_values, (10, 10))  # 100 cells, each with one o the 8 values
values, m_cat = np.unique(m, return_inverse=True)
m_cat = m_cat.reshape(m.shape)
colors = ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf']  # 8 colors

ax = sns.heatmap(m_cat, cmap=ListedColormap(colors), annot=m, fmt='.2f', cbar=True,
                 cbar_kws={'ticks': np.linspace(0, len(values) - 1, 2 * len(values) + 1)[1::2]})
cbar_ax = ax.figure.axes[-1]  # last created ax
cbar_ax.set_yticklabels([f'{v:.6f}' for v in values])
cbar_ax.set_title('Values')
plt.show()

示例圖

暫無
暫無

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

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