如何使用范围为 -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)

总结:

  • 映射颜色,使用标准化值
  • 绘制数据,使用原始值