我是 matplotlib 的新手,今天我想问一下我当前的问题。 请看我的代码:
x = [1,2,3,4,5,6,7,8,9,10]
y = [1,2,3,4,5,6,7,8,9,10]
colors = [0,1,1,0,1,4,1,3,2,4]
sizes = [500,500,300,300,300,500,500,300,300,300]
map1 = plt.cm.get_cmap("jet", 5)
plt.scatter(x[0:3], y[0:3], c=colors[0:3] ,s=sizes[0:3],marker="*",cmap=map1)
plt.scatter(x[3:6], y[3:6], c=colors[3:6] ,s=sizes[3:6],marker="<",cmap=map1)
plt.scatter(x[6:10], y[6:10], c=colors[6:10], s=sizes[6:10],marker="D",cmap=map1)
plt.colorbar(ticks=range(5))
plt.clim(-0.5, 4.5)
plt.show()
问题是我无法获得多个标记和多种颜色的结果。正如你所看到的,我有一个包含 10 个项目的测试数据集,我想用标记 * 显示第 1 个 -> 第 3 个项目,并且颜色与颜色数组兼容(第一个项目将为 0 颜色,第二个项目将为 1颜色)... 与结果图像一样,只有最后一个 plt.scatter 的颜色才是真实的。 我不明白我错在哪里。 请给我一些解决方案。 非常感谢
最佳答案
您需要对所有散点图使用相同的颜色归一化。这种标准化需要跨越可能的颜色值的完整范围。否则第一个散布不知道第二个散布的范围等。
import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8,9,10]
y = [1,2,3,4,5,6,7,8,9,10]
colors = [0,1,1,0,1,4,1,3,2,4]
sizes = [500,500,300,300,300,500,500,300,300,300]
map1 = plt.cm.get_cmap("jet", 5)
norm = plt.Normalize(min(colors),max(colors))
kw = dict(cmap=map1, norm=norm)
plt.scatter(x[0:3], y[0:3], c=colors[0:3] ,s=sizes[0:3],marker="*",**kw)
plt.scatter(x[3:6], y[3:6], c=colors[3:6] ,s=sizes[3:6],marker="<",**kw)
plt.scatter(x[6:10], y[6:10], c=colors[6:10], s=sizes[6:10],marker="D",**kw)
plt.colorbar(ticks=range(5))
plt.clim(-0.5, 4.5)
plt.show()
关于python - 如何在 matplotlib 中使用多标记、多颜色显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50208867/