2015-08-25 94 views
2

指定用下面的代碼點:Matplotlib不顯示從ginput

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.patches import Polygon 

data = np.random.rand(4, 4) 
plt.imshow(data) 

points_xy = np.array(plt.ginput(3)) 

p = Polygon(points_xy, alpha=0.3) 
plt.gca().add_artist(p) 
plt.show() 

多邊形不顯示。它如果我添加這個底:

plt.imshow(data) 

這是因爲多邊形是數據層的下方,當我打電話plt.imshow(data)它再次移動多邊形下面的數據層?

硬編碼的點,而不是使用plt.ginput()也給出正確的結果:

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.patches import Polygon 

data = np.random.rand(4, 4) 
plt.imshow(data) 

points_x = (0, 2, 1) 
points_y = (0, 1, 3) 
points_xy = np.array([points_x, points_y]).T 

p = Polygon(points_xy, alpha=0.3) 
plt.gca().add_artist(p) 
plt.show() 

爲什麼不與我原來的代碼顯示的多邊形?

我使用Python 3.4和matplotlib 1.4.3。

回答

0

我認爲你只需要在plt.show之前plt.draw。在將藝術家添加到軸之後,直到另一個動作告知matplotlib重繪軸爲止,繪製該軸纔會被繪製。你可以用plt.draw來做到這一點。工作原因plt.imshow是因爲自動繪製軸

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.patches import Polygon 

data = np.random.rand(4, 4) 
plt.imshow(data) 

points_xy = np.array(plt.ginput(3)) 
p = Polygon(points_xy, alpha=0.3) 
plt.gca().add_artist(p) 

plt.draw() 
plt.show() 

enter image description here