python - 如何在 matplotlib 中使用多标记、多颜色显示数据

标签 python matplotlib

我是 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()

Result Image

问题是我无法获得多个标记和多种颜色的结果。正如你所看到的,我有一个包含 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()

enter image description here

关于python - 如何在 matplotlib 中使用多标记、多颜色显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50208867/

相关文章:

python - 按列而不是行填充 matplotlib 子图

python - 定义一次绘图选项并为多个子图调用它们

python - 如何在给定点数的情况下绘制最佳椭圆?

python - pyqt5 应用程序中的 matplotlib 工具栏

Python 多处理库错误(AttributeError : __exit__)

python - 带有pycharm导入错误的kivy

python - 具有相同数据的 Matplotlib 图不重叠

linux - 看不到 pylab 的情节

python - 如何从 sqlalchemy 映射创建表

python - CSRF token 丢失或不正确,即使我有 {% csrf_token %} 但我使用 HttpResponse