0

以下のコードに問題があります。

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 の値を設定しようとしているので、1 から 0 の間の値を使用する代わりに -10 から 30 の間の温度を使用できます。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()

2番目のソリューションのみが機能する理由はありますか? 私は動的な値、つまりmysqlからの入力とユーザーが選択したポイントを使用しているため、最初のソリューションは後で作業するのがはるかに簡単になります(そのコードの残りはこの質問にあります:完全なプログラムコード)

どんな助けでも素晴らしいでしょう。ありがとう!

4

1 に答える 1

2

float の代わりに文字列を渡している場合は、次の行を変更します。

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

matplotlibあなたが何を意味するのかをうまく推測しようとし、グレーを [0, 1] の間の浮動小数点数の文字列として定義できるようにします。

于 2013-04-16T23:54:01.120 に答える