带有颜色条的 Seaborn 图,以 0 为中心
Seaborn plot with colorbar, centered around 0
我试图通过添加颜色图(连续调色板)而不是使用 hue 参数来更改 seaborn 的默认行为,后者从连续变量创建 bin。我发现以下代码可以工作,但是,我想再添加一个选项,将颜色条以 0 为中心,即 0 获得白色,并且颜色从零发散到 negative/positive。
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
y=np.random.normal(30,30,100)
x=np.random.uniform(0,50,100)
s=sns.scatterplot(
y=y,
x=x,
hue=y,
size=y,
palette='RdBu',
sizes=(50,50)
)
norm=plt.Normalize(y.min(),y.max())
sm=plt.cm.ScalarMappable(cmap="RdBu",norm=norm)
sm.set_array([])
s.get_legend().remove()
s.figure.colorbar(sm)
从图像中可以看出,0 的颜色略带红色,因为数据关于 0 不对称。我怎样才能使颜色图以 0 为中心?如果中心位于 0,我完全可以使用从 -80 到 80(因为不对称)的膨胀色图。
使用从 seaborn 传递到 matplotlib.axes.Axes.scatter
(used to colour the points instead of palette
) and create a mcolors.TwoSlopeNorm
的 c
、norm
和 cmap
关键字参数来创建以零为中心的规范化,您可以像这样生成图:
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib.colors as mcolors
fig, ax = plt.subplots()
y=np.random.normal(30,30,100)
x=np.random.uniform(0,50,100)
vcenter = 0
vmin, vmax = y.min(), y.max()
normalize = mcolors.TwoSlopeNorm(vcenter=vcenter, vmin=vmin, vmax=vmax)
colormap = cm.RdBu
s=sns.scatterplot(
y=y,
x=x,
c=y,
norm=normalize,
cmap=colormap,
ax=ax,
)
scalarmappaple = cm.ScalarMappable(norm=normalize, cmap=colormap)
scalarmappaple.set_array(y)
fig.colorbar(scalarmappaple)
我试图通过添加颜色图(连续调色板)而不是使用 hue 参数来更改 seaborn 的默认行为,后者从连续变量创建 bin。我发现以下代码可以工作,但是,我想再添加一个选项,将颜色条以 0 为中心,即 0 获得白色,并且颜色从零发散到 negative/positive。
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
y=np.random.normal(30,30,100)
x=np.random.uniform(0,50,100)
s=sns.scatterplot(
y=y,
x=x,
hue=y,
size=y,
palette='RdBu',
sizes=(50,50)
)
norm=plt.Normalize(y.min(),y.max())
sm=plt.cm.ScalarMappable(cmap="RdBu",norm=norm)
sm.set_array([])
s.get_legend().remove()
s.figure.colorbar(sm)
从图像中可以看出,0 的颜色略带红色,因为数据关于 0 不对称。我怎样才能使颜色图以 0 为中心?如果中心位于 0,我完全可以使用从 -80 到 80(因为不对称)的膨胀色图。
使用从 seaborn 传递到 matplotlib.axes.Axes.scatter
(used to colour the points instead of palette
) and create a mcolors.TwoSlopeNorm
的 c
、norm
和 cmap
关键字参数来创建以零为中心的规范化,您可以像这样生成图:
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib.colors as mcolors
fig, ax = plt.subplots()
y=np.random.normal(30,30,100)
x=np.random.uniform(0,50,100)
vcenter = 0
vmin, vmax = y.min(), y.max()
normalize = mcolors.TwoSlopeNorm(vcenter=vcenter, vmin=vmin, vmax=vmax)
colormap = cm.RdBu
s=sns.scatterplot(
y=y,
x=x,
c=y,
norm=normalize,
cmap=colormap,
ax=ax,
)
scalarmappaple = cm.ScalarMappable(norm=normalize, cmap=colormap)
scalarmappaple.set_array(y)
fig.colorbar(scalarmappaple)