我有以下代码:
x = range(1, 100) # pixel x coordinates
y = range(21, 120) # pixel y coordinates
z = [-2, 5, 1, ..., 1] # should be mapped to colors
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import Normalize
cmap = cm.autumn
norm = Normalize(vmin=min(z), vmax=max(z))
colormap = cmap(norm(5))
plt.plot(x, y, cm=colormap)
现在我要绘制这些点[x, y]
,以便:
len(x)
可能约为35'000
),而不仅仅是一个标记(恐怕它们会以其他方式重叠)。min(z)
映射为白色,将max(z)
映射为黑色(并显示图例)。如何使用matplotlib做到这一点?
答案 0 :(得分:0)
由于您是在谈论像素而不是标记,并且我不知道您是获取所有像素坐标的数据还是仅获取一些像素坐标的数据,因此我将向您展示这两者的数据。我将包含numpy
软件包,因为它使使用数组的所有操作变得更加容易。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import Normalize
x = range(1, 100) # pixel x coordinates
y = range(21, 120) # pixel y coordinates
假设您拥有[x, y]
所涵盖的所有坐标的z数据:
In [1]: z = np.random.rand(len(x), len(y)) # should be mapped to colors
plt.imshow(z)
plt.colorbar()
Out [1]:
假设每个z
值都映射到一个[x, y]
坐标对,但是并不能覆盖所有坐标:
In [2]:
z = np.random.rand(len(x))
arr = np.zeros([max(x) + 1, max(y) + 1])
arr[x, y] = z
plt.imshow(arr)
plt.colorbar()
Out [2]: