Python Matplotlib 点颜色

5 投票
1 回答
1908 浏览
提问于 2025-04-17 19:54

我一直在研究如何用传感器绘制温度图,想知道怎么才能制作一个等高线图或者热力图,或者根据颜色映射来调整我的点的颜色。

我现在有一个非常简单的图:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
from pylab import *

figure(figsize=(15, 8))
# use ginput to select markers for the sensors
matplotlib.pyplot.hot()

markers = [(269, 792, 0.65), (1661, 800, 0.5), (1017, 457, 0.8)]
x,y,t = zip(*markers)

img = mpimg.imread('floor.png')
imgplot = plt.imshow(img, cmap=cm.hot)
plot(x, y, 'h', c=t, ms=15)

colorbar()
show()

在标记的第三个值应该是点的颜色。不过,当我绘制这个图的时候,它却是用标记的第一个值给每个点上了同样的颜色。我想知道是否可以为这些点设置颜色映射,这样我就可以用“热”的颜色来表示实际的温度?现在的点是浅紫色的,我猜这是默认的颜色映射。我发现颜色映射好像不是绘图时有效的参数,所以我不太确定该在哪里设置。

我其实更想尝试的另一种解决方案是使用等高线图或者二维直方图来显示热度范围。这能在一张图片上绘制吗?我看过这个例子,但我似乎无法正确修改它,以使用实际的数值而不是随机函数。有没有人能分享一个他们以前用过的替代解决方案或示例代码,能实现我想要的效果?我对找到的文档有点困惑。

谢谢!

1 个回答

2

这就是 scatter 的用途:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
from pylab import *

figure(figsize=(15, 8))
# use ginput to select markers for the sensors
matplotlib.pyplot.hot()

markers = [(269, 792, 0.65), (1661, 800, 0.5), (1017, 457, 0.8)]
x,y,t = zip(*markers)

img = mpimg.imread('floor.png')
imgplot = plt.imshow(img, cmap=cm.hot)
scatter(x, y, marker='h', c=t, s=150)

colorbar()
show()

注意,这里的参数和 plot 不一样,而且大小的缩放方式也不同。如果你想改变点的颜色,可以使用 scattercmap 参数。

撰写回答