2013-04-16 97 views
0

我無法用下面的代碼:Matplotlib CMAP值必須是0-1之間

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

任何幫助將是偉大的。謝謝!

回答

2

您在字符串代替花車發放,改變這一行:

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

matplotlib嘗試是好的約猜測你的意思,讓你作爲一個浮動的[0,1之間的串定義灰色]這是它試圖處理你的字符串值(並抱怨,因爲它不在範圍內)。

+0

驚人的 - 完美的作品。謝謝! – Ollie