2013-03-13 58 views
0

是否可以繪製使用Matplotlib的RGB值圖?使用Matplotlib繪製三列數據的RGB圖

我有三列數據,我從以下形式的文本文件閱讀,其中x和y是所期望的座標和z是所期望的RGB顏色的十六進制字符串在給定的座標繪製:

 
x y z 
1 0.5 #000000
2 0.5 #FF0000
3 0.5 #00FF00
1 1.5 #0000FF
2 1.5 #FFFF00
3 1.5 #00FFFF
1 1.5 #FF00FF
2 2.5 #C0C0C0
3 2.5 #FFFFFF

這是我目前的代碼狀態。的誤差被從的GridData()函數拋出:

import pandas as pds 
import matplotlib.pyplot as plt 

# Import text file using pandas 
datafile = pds.read_csv(PathToData,sep='\t') 

X=datafile.x 
Y=datafile.y 
Z=datafile.z 

# Generate mesh as 'numpy.ndarray' type for plotting 
# This throws the following error: 
# ValueError: could not convert string to float: #FFAA39 
Z=griddata(X, Y, Z, unique(X), unique(Y)) 

非常感謝

+0

這是可能的,但你有什麼嘗試? – tacaswell 2013-03-13 22:40:45

+0

我一直在嘗試使用pcolor()和imshow(),但目前對於我來說這兩者似乎都不能正常工作。謝謝 – atstack 2013-03-14 00:15:11

+0

你應該發佈你的嘗試。人們更願意幫助您修復您已有的代碼,而不是爲您編寫代碼。你的問題是你無法解析文本文件?如果沒有,我們不需要知道您在數據中有數據後就從文本文件導入。 'imshow'給你錯誤嗎?如果是這樣的錯誤?如果不是,那麼它與你的期望有什麼不同? – tacaswell 2013-03-14 01:10:41

回答

1

griddata是內插於不均勻地間隔開的數據到一個網格(griddata doc)的功能。在你的情況下,它看起來像你已經有一個網格上的數據,你只需要重塑它。因爲griddata正在嘗試將顏色十六進制代碼轉換爲浮點數以進行插值,所以出現錯誤,因爲應該變爲,因爲#00FF00沒有明顯的浮點數間接匹配。

data_dims = (3, 3) # or what ever your data really is 
X = np.asarray(x).reshape(data_dims) 
Y = np.asarray(y).reshape(data_dims) 
C = np.asarray([mpl.colors.colorConverter.to_rgb(_hz) for _hz in z]).reshape(data_dims + (3,)) 
# the colors converted to (r, g, b) tuples 

asarray調用是爲了確保我們有數組,而不是數據框。

如果你只是想看看我們可以使用imshow數組繪製它:

imshow(c, interpolation='none', 
     origin='bottom', 
     extent=[np.min(X), np.max(X), np.min(Y), np.max(Y)]) 

color converter docimshow文檔。

您可能需要轉置/翻轉/旋轉C以獲得您期望的方向。

+0

謝謝。這幾乎是完美的,但是,軸編號是有點關閉......是否有一個簡單的方法來解決這個問題?這裏是鏈接到輸出[鏈接](http://i45.tinypic.com/2m4x2cy.png) – atstack 2013-03-14 19:45:22

+0

玩'extent'中的值。該框是結果將填充的框。 – tacaswell 2013-03-14 19:56:02