Используя пример из другого сообщения , я добавляю цветовую полосу к диаграмме рассеивания. Идея состоит в том, что и оттенок точки, и оттенок цветовой шкалы должны соответствовать максимальному и минимально возможному, чтобы цветовая шкала могла отражать диапазон значений в оттенке:
x= [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200]
y= [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200]
z= [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 255]
df = pd.DataFrame(list(zip(x, y, z)), columns =['x', 'y', 'z'])
colormap=matplotlib.cm.viridis
#A continuous color bar needs to be added independently
norm = plt.Normalize(df.z.min(), df.z.max())
sm = plt.cm.ScalarMappable(cmap=colormap, norm=norm)
sm.set_array([])
fig = plt.figure(figsize = (10,8), dpi=300)
ax = fig.add_subplot(1,1,1)
sb.scatterplot(x="x", y="y",
hue="z",
hue_norm=(0,255),
data=df,
palette=colormap,
ax=ax
)
ax.legend(bbox_to_anchor=(0, 1), loc=2, borderaxespad=0., title='hue from sb.scatterplot')
ax.figure.colorbar(sm).set_label('hue from sm')
plt.xlim(0,255)
plt.ylim(0,255)
plt.show()
введите описание изображения здесь
Обратите внимание, как оттенок из диаграммы рассеяния, даже с hue_norm
, изменяется до 300. В свою очередь, оттенок из colorbar
колеблется от 0
до 255
. Экспериментируя со значениями в hue_norm
, кажется, что matplotlib всегда округляет его, чтобы у вас было «хорошее» (даже?) Количество интервалов.
Мои вопросы:
- Какой из них показывает неправильный диапазон: диаграмма рассеяния, легенда диаграммы рассеяния или цветовая шкала? И как это исправить?
- Как вы могли получить минимальный и максимальный оттенок из диаграммы рассеяния (в данном случае 0 и 300 соответственно), чтобы установить их как максимальные и минимальные из
colorbar
?