2016-01-15 3 views
1

У меня есть матрица, хранящаяся в виде списка списков, и еще два списка, представляющих метки для x и y осей.Рисование матрицы в Python?

A = [[1, 3, 4, 5, 6, 7], 
    [3, 3, 0, 7, 9, 2], 
    [1, 3, 4, 5, 6, 6]]  
x = ["A", "B", "C", "E", "F", "G"] 
Y = ["R", "S", "T"] 

Я хочу нарисовать матрицу в виде таблицы (как на рисунке ниже).

Возможно ли это в Python?

Matrix

+1

См http://stackoverflow.com/questions/22104785/how-to-draw-dynamic-programming-table-in-python –

ответ

4

Я думаю, что вы можете просто использовать plt.text для этих целей. Приведенный ниже код использует его для получения желаемого результата.

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib import rcParams 
rcParams['font.family'] = 'serif' 
rcParams['font.size'] = 16 

A = [[1, 3, 4, 5, 6, 7], 
    [3, 3, 0, 7, 9, 2], 
    [1, 3, 4, 5, 6, 6]] 
X = ["A", "B", "C", "E", "F", "G"] 
Y = ["R", "S", "T"] 

m = len(Y) 
n = len(X) 

plt.figure(figsize=(n + 1, m + 1)) 
for krow, row in enumerate(A): 
    plt.text(5, 10*krow + 15, Y[krow], 
      horizontalalignment='center', 
      verticalalignment='center') 
    for kcol, num in enumerate(row): 
     if krow == 0: 
      plt.text(10*kcol + 15, 5, X[kcol], 
        horizontalalignment='center', 
        verticalalignment='center') 
     plt.text(10*kcol + 15, 10*krow + 15, num, 
       horizontalalignment='center', 
       verticalalignment='center') 

plt.axis([0, 10*(n + 1), 10*(m + 1), 0]) 
plt.xticks(np.linspace(0, 10*(n + 1), n + 2), []) 
plt.yticks(np.linspace(0, 10*(m + 1), m + 2), []) 
plt.grid(linestyle="solid") 
plt.savefig("Table.png", dpi=300) 
plt.show() 

И вы получите

enter image description here

Смежные вопросы