2016-11-30 5 views
0

Ich muss Werte meiner Matrix mit matshow anzeigen. Aber mit dem Code, den ich jetzt habe, bekomme ich nur zwei Matrizen - eine mit Werten und anderen Farben. Wie stelle ich sie auf? Thanks :)Anzeige Matrixwerte und Colormap

import numpy as np 
import matplotlib.pyplot as plt 

fig, ax = plt.subplots() 

min_val, max_val = 0, 15 

for i in xrange(15): 
    for j in xrange(15): 
     c = intersection_matrix[i][j] 
     ax.text(i+0.5, j+0.5, str(c), va='center', ha='center') 

plt.matshow(intersection_matrix, cmap=plt.cm.Blues) 

ax.set_xlim(min_val, max_val) 
ax.set_ylim(min_val, max_val) 
ax.set_xticks(np.arange(max_val)) 
ax.set_yticks(np.arange(max_val)) 
ax.grid() 

Ausgang:

enter image description here enter image description here

Antwort

3

Sie müssen ax.matshow nicht plt.matshow verwenden beide um sicherzustellen, dass sie auf den gleichen Achsen erscheinen.

Wenn Sie dies tun, müssen Sie auch nicht die Achsenlimits oder Ticks einstellen.

import numpy as np 
import matplotlib.pyplot as plt 

fig, ax = plt.subplots() 

min_val, max_val = 0, 15 

intersection_matrix = np.random.randint(0, 10, size=(max_val, max_val)) 

ax.matshow(intersection_matrix, cmap=plt.cm.Blues) 

for i in xrange(15): 
    for j in xrange(15): 
     c = intersection_matrix[j,i] 
     ax.text(i, j, str(c), va='center', ha='center') 

Hier habe ich einige zufällige Daten erstellt, da ich Ihre Matrix nicht habe. Beachten Sie, dass ich die Reihenfolge des Index für die Textbeschriftung zu [j,i] statt [i][j] ändern musste, um die Etiketten richtig auszurichten.

enter image description here

+0

Vielen Dank! :) Könnten Sie bitte den Schritt erläutern, in dem Sie die Reihenfolge des Indexes für das Textlabel ändern? Warum ist es notwendig, 'i' und' j' zu ändern? – fremorie

+0

Es geht darum, ob Sie die Array-Indizierung als C-Bestellung oder FORTRAN-Bestellung betrachten. Sie können darüber lesen: https://docs.scipy.org/doc/numpy/reference/internals.html#multidimensional-array-indexing-order-issues – tom