Frage

Ich möchte eine einfache Infografik in Python erstellen. Matplotlib scheint eine Menge Features zu haben, aber nichts, was meine einfache Heatmap Raster Beispiel deckt ab.

Die Informationsgrafik ist ein einfaches 5 x 5 Raster mit Zahlen innerhalb von 0 bis 1 reich Die Gitterquadrate würde dann in 0 = weiß 1 = blau 0,5 ist ein hellblau gefärbt werden.

Matplotlib wahrscheinlich verwendet werden könnte, aber ich konnte keine Beispiele finden oder kombinieren, die einen Einblick boten diese in zu erzeugen.

Einsicht, Beispiel-Code oder Bibliothek Richtung würde wirklich helfen

Viele Grüße Matt

War es hilfreich?

Lösung

Es hängt davon ab, was Sie mit dem Graphen tun müssen, wenn Sie es haben, Matplotlib erlaubt Sie interaktiv am Bildschirm die Grafik zu zeigen, ist es in jedem Vektor, pdf oder Bitmap-Format speichern und vieles mehr.

Wenn Sie sich für dieses Rahmens entscheiden, imshow wird tun, was Sie benötigen, ist hier ein Beispiel:

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

Für weitere Details zu dem colormap diesem Link , und hier ist der Link für imshow rel="nofollow -. oder einfach help(colors.LinearSegmentedColormap) und help(imshow) verwenden

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

(beachten Sie, dass dies das Ergebnis mit den Standard-Optionen ist, ein Raster hinzufügen können, die Filterung ändern und so weiter).


Bearbeiten

  

aber ich suche die angezeigt werden   Zahlen im Raster

Um es einfach:

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

Andere Tipps

PyCairo ist dein Freund. Einfaches Beispiel:

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)

Ausgang

Sie können feststellen, diesem Tutorial hilfreich.

Eine Möglichkeit SVG zu erzeugen, aus Python wäre. Sie können SVG in Firefox oder Inkscape anzuzeigen.

Hier ist ein schnelles und unsauberes Beispiel:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top