色相,颜色栏或散点图的颜色在seaborn.scatterplot

时间:2020-07-13 08:54:17

标签: python-3.x matplotlib seaborn

使用an example from another post,我向散点图添加了一个颜色条。想法是,点色和色条色都应符合可能的最大值和最小值,以便色条可以反映色相中的值范围:

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()

enter image description here

请注意,即使使用hue_norm,散点图的色相范围也最多为300。反之,colorbar的色相范围是0255。通过对hue_norm中的值进行试验,似乎matplotlib总是将其四舍五入,以便您有一个“良好”(甚至?)个间隔。

我的问题是:

  1. 哪个是显示错误的范围:散点图,散点图例或颜色栏?以及如何纠正呢?
  2. 如何将散点图中的最小和最大色相(在本例中分别为0和300)取回,以将它们设置为colorbar的最大值和最小值?

1 个答案:

答案 0 :(得分:1)

您真的需要使用seaborn的scatterplot()吗?使用数字hue总是很混乱。

下面的代码要简单得多,并产生明确的输出

fig, ax = plt.subplots()
g = ax.scatter(df['x'],df['y'], c=df['z'], cmap=colormap)
fig.colorbar(g)

enter image description here