如何使用范围为 -0.1 到 0.1 的数组定义的不同边缘颜色绘制散点图
How to plot scatter with different edgecolor defined by an array ranged -0.1 to 0.1
def scatterplot(part):
colors = part['deltf']
c = plt.cm.coolwarm(colors)
plt.scatter(part['fnormal'], part['mu']/part['E'], c='w',edgecolors=c,alpha=0.5,
cmap='coolwarm', marker="o")
通过运行这段代码输出的图上边缘颜色只有一种颜色。我发现 plt.cm.coolwarm
需要正值,但我需要呈现负值。
如果有人能帮助我,我将不胜感激。
您需要将值标准化为 [0, 1] 以映射颜色。请看下面的代码:
import matplotlib as mpl
xx = np.linspace(-0.1, 0.1, 100)
def normalize(xx):
vmin = xx.min()
vmax = xx.max()
return (xx - vmin)/(vmax-vmin)
cmap = mpl.cm.coolwarm
norm = mpl.colors.Normalize(vmin=-0.1, vmax=0.1)
def scatterplot(xx):
colors = normalize(xx)
c = plt.cm.coolwarm(colors)
fig, ax = plt.subplots(1, 1, figsize=(7.2, 7.2))
ax.scatter(xx, np.sin(xx), c='w',edgecolors=c,alpha=0.5, cmap='coolwarm', marker="o")
cbar = plt.colorbar(plt.cm.ScalarMappable(norm=norm, cmap=cmap), ax=ax)
scatterplot(xx)
总结:
- 映射颜色,使用标准化值
- 绘制数据,使用原始值
def scatterplot(part):
colors = part['deltf']
c = plt.cm.coolwarm(colors)
plt.scatter(part['fnormal'], part['mu']/part['E'], c='w',edgecolors=c,alpha=0.5,
cmap='coolwarm', marker="o")
通过运行这段代码输出的图上边缘颜色只有一种颜色。我发现 plt.cm.coolwarm
需要正值,但我需要呈现负值。
如果有人能帮助我,我将不胜感激。
您需要将值标准化为 [0, 1] 以映射颜色。请看下面的代码:
import matplotlib as mpl
xx = np.linspace(-0.1, 0.1, 100)
def normalize(xx):
vmin = xx.min()
vmax = xx.max()
return (xx - vmin)/(vmax-vmin)
cmap = mpl.cm.coolwarm
norm = mpl.colors.Normalize(vmin=-0.1, vmax=0.1)
def scatterplot(xx):
colors = normalize(xx)
c = plt.cm.coolwarm(colors)
fig, ax = plt.subplots(1, 1, figsize=(7.2, 7.2))
ax.scatter(xx, np.sin(xx), c='w',edgecolors=c,alpha=0.5, cmap='coolwarm', marker="o")
cbar = plt.colorbar(plt.cm.ScalarMappable(norm=norm, cmap=cmap), ax=ax)
scatterplot(xx)
总结:
- 映射颜色,使用标准化值
- 绘制数据,使用原始值