Domanda

Voglio creare un semplice infografica in python. Matplotlib sembra avere un sacco di funzioni, ma niente di che copre il mio semplice esempio griglia heatmap.

L'infografica è una semplice griglia 5 x 5 con numeri interno che varia da 0 a 1. I quadrati della griglia sarebbero poi colorati 0 = bianco 1 = 0.5 blu essendo un blu chiaro.

Matplotlib potrebbe probabilmente essere utilizzato, ma non riuscivo a trovare o combinare tutti gli esempi che hanno offerto comprensione generare questo.

Tutta la comprensione, codice di esempio o la direzione biblioteca sarebbe davvero aiutare

Saluti Matt

È stato utile?

Soluzione

Dipende da quello che devi fare con il grafico, una volta che lo avete, Matplotlib permette di mostrare in modo interattivo il grafico sullo schermo, salvarlo in formato vettoriale, PDF o in formato bitmap, e altro ancora.

Se si opta per questo quadro, imshow farà quello che vi serve, ecco un esempio:

# 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)

Per ulteriori informazioni sulla controllare questo link , e qui è la per imshow -. o semplicemente usare help(colors.LinearSegmentedColormap) e help(imshow)

alt text http://img522.imageshack.us/img522/6230/bluep .png

(si noti che questo è il risultato con le opzioni standard, è possibile aggiungere una griglia, modificare il filtraggio e così via).


Modifica

  

però sto cercando di visualizzare il   numeri nella griglia

Per farla semplice:

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")

Altri suggerimenti

PyCairo è tuo amico. Semplice esempio:

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)

uscita

Si potrebbe trovare questo tutorial utile.

Una possibilità sarebbe quella di generare SVG in pitone. È possibile visualizzare SVG in Firefox o Inkscape.

Ecco un esempio veloce-e-sporca:

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>')

alt text http://www.imagechicken.com/uploads/1257184721026098800.png

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top