Creazione di un Infografica In Python
-
12-09-2019 - |
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
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)
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