Matplotlib cmap值必须介于0-1之间

时间:2013-04-16 22:27:30

标签: matplotlib

我遇到以下代码的问题:

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


s = (('408b2e00', '24.21'), ('408b2e0c', '22.51'), ('4089e04a', '23.44'), ('4089e04d', '24.10'))

temp = [x[1] for x in s]
print temp

figure(figsize=(15, 8))

pts = [(886.38864047695108, 349.78744809964849), (1271.1506973277974, 187.65500904929195), (1237.272277227723, 860.38363675077176), (910.58751197700428, 816.82566805067597)]

x = map(lambda x: x[0],pts) # Extract the values from pts
y = map(lambda x: x[1],pts) 
t = temp

result = zip(x,y,t)

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

# Add cmap
colorbar()
show()

考虑到s中的温度 - 我试图设置cmap的值,这样我可以使用介于-10和30之间的温度,而不必使用介于1和0之间的值。我设置了vmin和vmax值,但它仍然给我下面的错误:

ValueError: to_rgba: Invalid rgba arg "23.44" to_rgb: Invalid rgb arg "23.44" gray (string) must be in range 0-1

我使用早期代码来简化问题并取得了成功。下面这个例子有效,并展示了我想要做的事情(希望如此):

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, -5), (1661, 800, 20), (1017, 457, 30)]
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, vmin=-10, vmax=30)

colorbar()
show()

任何想法为什么只有第二种解决方案有效?我正在使用动态值,即来自mysql和用户选择点的输入,因此第一个解决方案将更容易在以后工作(其余代码在此问题中:Full program code

任何帮助都会很棒。谢谢!

1 个答案:

答案 0 :(得分:2)

您正在交换字符串而不是浮点数,请更改此行:

temp = [float(x[1]) for x in s]

matplotlib尝试善于猜测你的意思,并让你将灰色定义为[0,1]之间的浮点字符串,这是你试图用你的字符串值做的(并因为抱怨因为它不在范围内。)