python - 在 python 3 中使用 matplotlib scatter 函数时如何更改点子集的绘图标记

标签 python python-3.x matplotlib plot scatter

我有许多自定义 2d 点对象,每个对象都有:

  • 坐标 x 和 y
  • 标签 1°(-1 和 +inf 之间的整数):这将以标记的颜色(cmap 的索引)表示
  • label 2°([1 3]范围内的整数):我希望这个在标记类型中表示

问题是,许多点将共享标签 1° 值,但标签 2° 值可能不同,反之亦然。

我尝试提取有关标签 2° 值的点并单独绘制它们,如下所示:

pointsSubset1 = getPointsWithLabel2Value1()
pointsSubset2 = getPointsWithLabel2Value2()
pointsSubset3 = getPointsWithLabel2Value3()

# just assume x y and labels values are obtained correctly

plt.scatter(x1, y1, c=listOfLabels1ForSubset1, cmap="nipy_spectral", marker='s') # plotting pointsSubset1

plt.scatter(x2, y2, c=listOfLabels1ForSubset2, cmap="nipy_spectral", marker='.') # plotting pointsSubset2

plt.scatter(x3, y3, c=listOfLabels1ForSubset3, cmap="nipy_spectral", marker='<') # plotting pointsSubset3

我以为这会起作用,但事实并非如此。标记设置正确,但颜色不正确...

忽略 x 和 y 坐标的示例:

  • 子集1 =

    • 第一点:
      • 标签1:-1
      • 标签2:1
  • 子集2 =

    • 第2点:
      • 标签1:1
      • 标签2:2

在这种情况下,子集 1 中的点 1 将具有与子集 2 中的点 2 不同的标记,但两者将共享相同的颜色(黑色),因为当两者单独绘制时,尽管它们具有不同的 label1 值,但两者都将映射到光谱中的第一种颜色......

我希望 cmap 中的颜色索引在点子集之间匹配,并且我不认为传递自定义颜色数组是解决方案,因为标签 1 可能的值在 [-1, +inf] 范围内(而且我不知道如何管理 cmap 标准化)。

提前致谢。

最佳答案

我想会到达你想要的地方

Npoints = 50
x,y = np.random.random(size=(2,Npoints))
label1 = np.random.choice([-1,1,2,3], size=(Npoints,))
label2 = np.random.choice([1,2,3],size=(Npoints,))

label1_min = min(label1)
label1_max = max(label1)
marker_dict = {1:'s',2:'o',3:'<'}

fig, ax = plt.subplots()
for i,m in marker_dict.items():
    ax.scatter(x[label2==i], y[label2==i], marker=m, c=label1[label2==i], cmap='nipy_spectral', vmin=label1_min, vmax=label1_max)

enter image description here

关于python - 在 python 3 中使用 matplotlib scatter 函数时如何更改点子集的绘图标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58190892/

相关文章:

python - 如何为 Django 模型中的用户名匹配数据库中的确切大小写?

python-3.x - 从 'morningstar' 中提取的 pandas datareader 结果为 404(2018 年 7 月 27 日正常)

python - 为 ponyorm 的实体定义构造函数导致 TypeError

python - 重命名外部模块类方法

matplotlib - 如何将格式应用于 Matplotlib 表中的单元格内容

python - 如何修复 "PATH"问题?

python - 这种方法是否为 "vectorized"- 用于中等数据集,速度相对较慢

python - 为什么在 python f-strings 中使用双花括号而不是反斜杠?

pandas - 如何清晰地绘制 statsmodels 线性回归 (OLS)

python - 掩盖圆形区域的流图