2014-04-09 13 views
5

Gegeben eine spärliche binäre Matrix A (csr, coo, was auch immer) Ich möchte eine Darstellung machen, so dass ich die Position (i, j) = weiß in der Figur sehen kann, wenn A (i, j) = 1, und (i, j) = schwarz, wenn A (i, j) = 0 ist;python matplotlib plot spärlich Matrixmuster

Für ein dichtes numpy Array wird matshow die Aufgabe erledigen. Allerdings ist die Dimension meiner spärlichen Matrix (zB 100000 x 1000000) zu groß, um in ein dichtes Array umgewandelt zu werden. Ich frage mich, wie ich das Muster in meiner kargen Matrix auftragen könnte.

Dank

Antwort

18

Sie können ein gutes Ergebnis mit einer coo_matrix bekommen, plot() und einigen Anpassungen:

import matplotlib.pyplot as plt 
from scipy.sparse import coo_matrix 

def plot_coo_matrix(m): 
    if not isinstance(m, coo_matrix): 
     m = coo_matrix(m) 
    fig = plt.figure() 
    ax = fig.add_subplot(111, axisbg='black') 
    ax.plot(m.col, m.row, 's', color='white', ms=1) 
    ax.set_xlim(0, m.shape[1]) 
    ax.set_ylim(0, m.shape[0]) 
    ax.set_aspect('equal') 
    for spine in ax.spines.values(): 
     spine.set_visible(False) 
    ax.invert_yaxis() 
    ax.set_aspect('equal') 
    ax.set_xticks([]) 
    ax.set_yticks([]) 
    return ax 

Beachten Sie, dass die y Achse invertiert wird die erste Zeile an der Spitze der Figur zu setzen. Ein Beispiel:

import numpy as np 
from scipy.sparse import coo_matrix 

shape = (100000, 100000) 
rows = np.int_(np.round_(shape[0]*np.random.random(1000))) 
cols = np.int_(np.round_(shape[1]*np.random.random(1000))) 
vals = np.ones_like(rows) 

m = coo_matrix((vals, (rows, cols)), shape=shape) 
ax = plot_coo_matrix(m) 
ax.figure.show() 

enter image description here

+2

Danke. Es ist wirklich hilfreich !! Lerne viel aus deinem Code :) – Jing