我在 [0, 1] 范圍內有一個包含 100 個浮點值的陣列。(最小值和最大值不一定是 0 和 1)
我想在 swarmplot 中將它們映射到“icefire”調色板中的色調。換句話說,我希望資料點(點)具有基于 100-val-array 的色調。
現在,我不希望將最低值映射到調色板中的“最低”顏色;我希望最低值映射到調色板中的“相應”顏色。
讓我們想象一下調色板也只是從 [0, 1] 開始,所以在“冰火”的情況下,0 是淺藍色,1 是淺紅色(冰火從淺藍色到中間的黑色,再到淺紅色)。
考慮到這一點,如果 100-val-array 中的最小值是 0.27,那么我希望該值映射到顏色 0.27,即在冰火的情況下,在藍色的某個地方。
我希望我清楚自己。
我不知道 swarmplot 中的“調色板”引數是如何作業的,但它并沒有做我想要的。
我需要這個的原因是因為資料點的顏色很重要,因為它反映了 100-val-array 中的實際值。
我相信僅使用 swarmplot(..., palette="icefire") 不會發生這種情況。
uj5u.com熱心網友回復:
與散點圖不同,Seaborn swarmplot(目前?)不使用vmin=andvmax=引數。將swarmplot色調映射視為分類。您可以通過創建palette將每個可能的hue值映射到其對應顏色的字典來模擬使用顏色圖。
您的示例如下所示:
import matplotlib.pyplot as plt
from matplotlib.cm import ScalarMappable
import seaborn as sns
import pandas as pd
import numpy as np
df = pd.DataFrame({'x': ['swarm 1'] * 100,
'y': np.random.normal(size=100),
'hue': np.random.uniform(0.27, 0.9, 100)})
cmap = sns.color_palette('icefire', as_cmap=True)
norm = plt.Normalize(vmin=0, vmax=1) # 0 and 1 are the defaults, but you can adapt these to fit other uses
palette = {h: cmap(norm(h)) for h in df['hue']}
ax = sns.swarmplot(data=df, x='x', y='y', hue='hue', palette=palette)
ax.legend_.remove() # remove the categorical legend
plt.colorbar(ScalarMappable(cmap=cmap, norm=norm), ax=ax) # optionally add a colorbar
plt.show()

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/473855.html
標籤:matplotlib 海运 色调 颜色图 群图
