Usaría LaTeX para generar las tablas, ya que se ven elegantes y puedes generar una imagen o ponerlas directamente en tu documento. Usé el siguiente código para lograr esto:
#!/usr/bin/env
import numpy as np
import os
x = np.array([[1,2],[3,4]])
def generateLatexTable(x):
start = [r'\documentclass[preview]{standalone}', r'\begin{document}', r'\begin{tabular}{%s}' % ('{1}{0}{1}'.format('|'.join(['r'] * x.shape[1]), '|')), r'\hline']
tab = [' & '.join(['%d' % val for val in row]) + r' \\ \hline' for row in x]
end = [r'\end{tabular}', r'\end{document}']
text = '\n'.join(start + tab + end)
return text
with open('table.tex', 'w') as f:
f.write(generateLatexTable(x))
os.system("pdflatex table.tex")
Aquí, previewse usa la clase de documento que devuelve una imagen redimensionada al contenido del documento, es decir, solo la tabla. Solo tabularse utiliza un entorno para presentar los datos. Hay barras horizontales y verticales entre las celdas, pero es muy fácil cambiar esto. En la variable, tablos datos se procesan para cada fila y se convierten en una cadena. Tenga en cuenta que debe especificar el formato de salida en esta posición. Lo configuré para %dque todo se convierta en enteros.
Si desea utilizar la tabla directamente en una fuente de látex, debe eliminar documentclassy \begin{document}también \end{document}en las variables de starty end. Finalmente, todo se junta en una fuente de látex que luego se almacena en el disco como table.tex. Si solo desea la imagen al final, se compila el archivo resultante table.pdf.
Así es como se ve la salida. Pero como dije, es muy fácil cambiar el aspecto ya que es LaTeX :)

Aquí hay otro ejemplo con una matriz grande (14 x 14), llena de números aleatorios que van del 0 al 100:

tableque sería un buen lugar para comenzar. No lo he usado lo suficiente como para dar una buena respuesta.