2014-06-15 14 views
5

Mam serię małych, o stałej szerokości i chcę je zastąpić etykietami zaznaczenia. Na przykład, rozważmy następujący przykład minimalną roboczą:Używanie obrazu dla etykiet zaznaczonych w matplotlib

import numpy as np 
import pylab as plt 

A = np.random.random(size=(5,5)) 
fig, ax = plt.subplots(1, 1) 
ax.matshow(A) 
plt.show() 

enter image description here

Chciałbym wymienić „0” z niestandardowego obrazu. Mogę turn off etykiet, load an image into an array i wyświetlić go dobrze. Nie jestem jednak pewny, czy

  • Gdzie znajdują się lokalizacje znaczników, ponieważ znajdują się one poza poletkiem.
  • Użyj imshow, aby wyświetlić obraz, gdy zostanie "obcięty", jeśli zostanie umieszczony w osi.

Myślałem, że w jakiś sposób używam set_clip_on lub niestandardowego wykonawcy, ale nie zrobiłem dużego postępu.

Odpowiedz

5

Interesujące pytanie i potencjalnie ma wiele możliwych rozwiązań. Oto moje podejście, w zasadzie najpierw obliczyć gdzie etykieta '0' się, a następnie narysować nową oś tam przy użyciu współrzędnych bezwzględnych, a na końcu umieścić obraz tam:

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 
import pylab as pl 

A = np.random.random(size=(5,5)) 
fig, ax = plt.subplots(1, 1) 

xl, yl, xh, yh=np.array(ax.get_position()).ravel() 
w=xh-xl 
h=yh-yl 
xp=xl+w*0.1 #if replace '0' label, can also be calculated systematically using xlim() 
size=0.05 

img=mpimg.imread('microblog.png') 
ax.matshow(A) 
ax1=fig.add_axes([xp-size*0.5, yh, size, size]) 
ax1.axison = False 
imgplot = ax1.imshow(img,transform=ax.transAxes) 

plt.savefig('temp.png') 

enter image description here

Powiązane problemy