了解彩色散点图的 Pyplot 代码

Understanding Pyplot code for coloured scatter plots

我在 Python 工作,在策划方面完全是个初学者。在另一个 post ()

import matplotlib.pyplot as plt

jet=plt.get_cmap('coolwarm')

x = [1,2,3,4]
y = [1,2,3,4]
z = [1,1,1,1]

a = [2,3,4,5]
b = [1,2,3,4]
c = [2,2,2,2]

d = [3,4,5,6]
e = [1,2,3,4]
f = [3,3,3,3]

plt.scatter(x, y, s=100, c=z, cmap=jet, vmin=0, vmax=4)
plt.scatter(a, b, s=100, c=c, cmap=jet, vmin=0, vmax=4)
plt.scatter(d, e, s=100, c=f, cmap=jet, vmin=0, vmax=4)

plt.clim(0,5)
plt.colorbar()
plt.show()

我找到了这段代码,它实际上已经非常适合我的目的。它会生成 3 个不同颜色的散点图:

我现在想更改代码以能够占用 10 个不同的地块而不是 3 个,所有地块都具有不同的颜色,但我不太了解代码。有人可以解释分散命令的不同部分的作用(以及 plt.clim())。我在网上搜索,但一切都很混乱。我还找到了一些更好的颜色方案,叫做 YIGnBu,但是程序不接受它。

也许有人可以为我阐明这一点。提前致谢!

首先它有助于阅读 scatter documentation。这并不混乱,并且解释了 scatter 签名的每个部分。

其次,matplotlib 页面上有示例,例如

这可能更适合作为资源。

一般来说,散点图的思想是散点的不同点可以有不同的大小(由 s 参数决定)和颜色(由 c 决定)。

因此,您展示的示例代码不是一个很好的示例,因为它使用了三个不同的散点图,而其中只需要一个图

import matplotlib.pyplot as plt

x = [1,2,3,4, 2,3,4,5, 3,4,5,6]
y = [1,2,3,4, 1,2,3,4, 1,2,3,4]
z = [1,1,1,1, 2,2,2,2, 3,3,3,3]

plt.scatter(x, y, s=100, c=z, cmap='YlGnBu')

plt.colorbar()
plt.show()

要创建 10 个不同的地块,您同样可以使用普通的 plot:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(1,5)
y = np.arange(1,5)

for i in range(10):
    plt.plot(x+i, y, ls="", marker="o", ms=10, color=plt.cm.YlGnBu(i/9.) )
plt.show()

然而,最后一种方法在添加颜色条时会变得有点复杂,因为绘图本身不是 ScalarMappable 本身。因此Once需要手动为colorbar创建ScalarMappable。

import matplotlib.pyplot as plt
import matplotlib.colors as colors
import numpy as np

x = np.arange(1,5)
y = np.arange(1,5)

for i in range(10):
    plt.plot(x+i, y, ls="", marker="o", ms=10, color=plt.cm.YlGnBu(i/9.) )

sm = plt.cm.ScalarMappable(cmap="YlGnBu", norm=colors.Normalize(vmin=0, vmax=9))
sm.set_array([])  # only needed for matplotlib < 3.1
plt.colorbar(sm)
plt.show()