2014-03-01 48 views
2

我試圖繪製文本值而不是符號(對於MDS解決方案),並且matplotlib.pyplot給我錯誤我不明白。我更新了ipython和matplotlib,以確保它不是一個老問題(或舊版本的問題),並且我一直無法在這裏(或通過谷歌的其他地方)找到任何類似問題的答案或報告。matplotlib文本(和figtext)錯誤

因此,例如,調用ipython --pylab後,如果I型:如果我嘗試調用帶有標量文本而不是

Traceback (most recent call last): 
    File "//anaconda/lib/python2.7/site-packages/matplotlib/artist.py", line 55, in 
    draw_wrapper draw(artist, renderer, *args, **kwargs) 
    File "//anaconda/lib/python2.7/site-packages/matplotlib/figure.py", line 1034, in draw 
    func(*args) 
    File "//anaconda/lib/python2.7/site-packages/matplotlib/artist.py", line 55, in 
    draw_wrapper draw(artist, renderer, *args, **kwargs) 
    File "//anaconda/lib/python2.7/site-packages/matplotlib/axes.py", line 2086, in draw 
    a.draw(renderer) 
    File "//anaconda/lib/python2.7/site-packages/matplotlib/artist.py", line 55, in 
    draw_wrapper draw(artist, renderer, *args, **kwargs) 
    File "//anaconda/lib/python2.7/site-packages/matplotlib/text.py", line 547, in draw 
    bbox, info, descent = self._get_layout(renderer) 
    File "//anaconda/lib/python2.7/site-packages/matplotlib/text.py", line 287, in 
    _get_layout key = self.get_prop_tup() 
    File "//anaconda/lib/python2.7/site-packages/matplotlib/text.py", line 696, in 
    get_prop_tup x, y = self.get_position() 
    File "//anaconda/lib/python2.7/site-packages/matplotlib/text.py", line 684, in 
    get_position x = float(self.convert_xunits(self._x)) 
TypeError: only length-1 arrays can be converted to Python scalars 

我得到了同樣的錯誤:

x = random.rand(4) 
y = random.rand(4) 
s = [str(i) for i in arange(4)+1] 

text(x,y,s) 

我得到這個錯誤向量/列表(例如,text(x[0],y[0],s[0]),或text函數的參數的任意數量的變體)。同樣的事情發生:

  • figtext
  • 如果我手動import matplotlib.pyplot as plt和呼叫plt.text
  • 如果我明確地使人物和插曲的對象和/或致電scatter(x,y)第一。

另外,對於它的價值,一旦出現此問題,如果手動調整圖的大小,則會再次出現錯誤消息。可能相關的一個事實是,數字的更改不會自動更新,但只能在另一個子圖中繪製或手動調整圖的大小後才能更新。但我離題了。

我已經在Mac(帶小牛)上安裝了Anaconda的更新安裝,並且如上所述,我正在使用iPython。

回答

4

plt.text需要單個x,y和字符串值,而不是序列。 (見:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.text

只需使用一個循環。

例如:

import numpy as np 
import matplotlib.pyplot as plt 

x, y = np.random.rand(2,4) 
s = [str(i) for i in np.arange(1, 5)] 

fig, ax = plt.subplots() 
text = [ax.text(*item) for item in zip(x, y, s)] 
plt.show() 

enter image description here