【问题标题】:How to set marker type for a specific point in a matplotlib scatter plot with colormap如何使用颜色图为 matplotlib 散点图中的特定点设置标记类型
【发布时间】:2016-11-13 22:35:18
【问题描述】:

我有一个用户案例,假设我有三个系列数据:x、y、z。 我想使用 plt.scatter 的 cmap 关键字制作散点图,使用 (x,y) 作为坐标,z 作为散点的颜色。但是,我想通过使用与其他点不同的标记类型和大小来突出某些特定点。

​一个最小的例子如下:

x,y,z = np.random.randn(3,10)
plt.scatter(x,y,c=z,cmap=matplotlib.cm.jet)
plt.colorbar()​

​如果我想为 (x[5],y[5],z[5]) 使用不同的标记类型,我该怎么做? 我能想到的唯一方法是使用 plt.scatter([x[5],y[5]) 再次绘制该点,但通过手动查找与 z[5] 对应的颜色图颜色来定义颜色。然而,这是相当乏味的。有没有更好的办法?

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    每个散点图都有一个标记,默认情况下,您不能在单个散点图中使用不同的标记。因此,如果您愿意只更改标记大小并保持标记不变,则可以为scatters 参数提供一个不同大小的数组。

    import matplotlib.pyplot as plt
    import numpy as np; np.random.seed(10)
    
    x,y,z = np.random.randn(3,10)
    
    sizes = [36]*len(x)
    sizes[5] = 121
    plt.scatter(x,y,c=z,s=sizes, cmap=plt.cm.jet)
    
    plt.colorbar()
    
    plt.show()
    

    如果你真的需要不同的标记样式,你可以绘制一个新的散点图。然后,您可以将第二个散点图的颜色限制设置为第一个散点图的颜色限制。

    import matplotlib.pyplot as plt
    import numpy as np; np.random.seed(10)
    
    x,y,z = np.random.randn(3,10)
    xs, ys, zs = [x[5]], [y[5]], [z[5]]
    print xs, ys, zs
    y[5] = np.nan
    
    sc = plt.scatter(x,y,c=z,s=36, cmap=plt.cm.jet)
    climx, climy = sc.get_clim()
    plt.scatter(xs,ys,c=zs,s=121, marker="s", cmap=plt.cm.jet, vmin=climx, vmax=climy  )  
    
    plt.colorbar()
    
    plt.show()
    

    最后,this answer 将给出在同一个散点图中有多个不同标记的复杂解决方案。

    【讨论】:

      猜你喜欢
      • 2013-12-06
      • 1970-01-01
      • 2020-12-17
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 2016-01-22
      相关资源
      最近更新 更多