Pregunta

Quiero crear una infografía simple en Python. Matplotlib parece tener un montón de características, pero nada que cubre mi ejemplo simple rejilla de mapa de calor.

La infografía es un simple rejilla 5 x 5 con los números dentro de un rango de 0 a 1. Los cuadrados de rejilla serían entonces ser de color en 0 = blanco 1 = azul 0,5 ser un azul pálido.

Matplotlib probablemente podría ser utilizado, pero no pude encontrar o combinar cualquier ejemplos que ofrecen una idea de la generación de este.

Cualquier idea, código de ejemplo o la dirección de la biblioteca sería de gran ayuda

Saludos Matt

¿Fue útil?

Solución

Depende de lo que tiene que ver con el gráfico una vez que lo tienes, Matplotlib permite a mostrar de forma interactiva el gráfico en la pantalla, guardarlo en formato vectorial, pdf o mapa de bits, y mucho más.

Si se opta por este marco, imshow hará lo que usted necesita, aquí es un ejemplo:

# Just some data to test:
from random import gauss
a = [[gauss(0, 10) for i in xrange(0, 5)] for j in xrange(0,5)]

from pylab import * # or just launch "IPython -pylab" from the command line

# We create a custom colormap:
myblue = cm.colors.LinearSegmentedColormap("myblue", {
    'red':   [(0, 1, 1), (1, 0, 0)], 
    'green': [(0, 1, 1), (1, 0, 0)],
    'blue':  [(0, 1, 1), (1, 1, 1)]})

# Plotting the graph:
imshow(a, cmap=myblue)

Para más detalles sobre el mapa de colores comprobar este enlace , y aquí está el enlace de imshow -. o simplemente utilizar help(colors.LinearSegmentedColormap) y help(imshow)

texto alternativo http://img522.imageshack.us/img522/6230/bluep .png

(tenga en cuenta que este es el resultado con las opciones estándar, puede agregar una cuadrícula, cambiar el filtrado y así sucesivamente).


Editar

  

Sin embargo Busco para mostrar la   números en la red

Para hacerlo simple:

for i in xrange(0,5):
    for j in xrange(0,5):
        text(i, j,
             "{0:5.2f}".format(a[i][j]),
             horizontalalignment="center",
             verticalalignment="center")

Otros consejos

PyCairo es su amigo. Un simple ejemplo:

from __future__ import with_statement
import cairo
img = cairo.ImageSurface(cairo.FORMAT_ARGB32,100,100)
g = cairo.Context(img)
for x in range(0,100,10):
    for y in range(0,100,10):
        g.set_source_rgb(.1 + x/100.0, 0, .1 + y/100.0)
        g.rectangle(x,y,10,10)
        g.fill()
with open('test.png','wb') as f:
    img.write_to_png(f)

de salida

Usted puede encontrar este tutorial útiles.

Una posibilidad sería generar SVG de pitón. Puede ver archivos SVG en Firefox o Inkscape.

Aquí está un ejemplo rápido y sucio-:

import random

def square(x, y, value):
    r, g, b = value * 255, value * 255, 255
    s = '<rect x="%d" y="%d" width="1" height="1" style="fill:rgb(%d,%d,%d);"/>' % (x, y, r, g, b)
    t = '<text x="%d" y="%d" font-size=".2" fill="yellow">%f</text>' % (x, y + 1, value)
    return s + '\n' + t

print('''
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg width="100%" height="100%" version="1.1" viewBox="0 0 5 5"
xmlns="http://www.w3.org/2000/svg">
''')
for x in range(0, 5):
    for y in range(0, 5):
        print(square(x, y, random.random()))

print('</svg>')

texto alternativo http://www.imagechicken.com/uploads/1257184721026098800.png

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top