문제

파이썬에서 간단한 인포 그래픽을 만들고 싶습니다. Matplotlib에는 많은 기능이 있지만 간단한 히트 맵 그리드 예제를 다루는 것은 없습니다.

인포 그래픽은 0에서 1까지의 숫자가있는 간단한 5 x 5 그리드입니다. 그리드 제곱은 0 = 흰색 1 = 파란색 0.5가 옅은 파란색으로 채색됩니다.

Matplotlib는 아마도 사용할 수 있지만이를 생성하는 데 대한 통찰력을 제공하는 예제를 찾거나 결합 할 수 없었습니다.

모든 통찰력, 예제 코드 또는 라이브러리 방향은 실제로 도움이됩니다.

Matt

도움이 되었습니까?

해결책

그래프를 가지고 일단 그래프로 무엇을 해야하는지에 따라 다릅니다. matplotlib 화면에 대화식으로 그래프를 표시하고 벡터, PDF 또는 비트 맵 형식 등을 저장할 수 있습니다.

이 프레임 워크를 선택하면 imshow 필요한 것을 할 것입니다. 예를 들어.

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

Colormap에 대한 자세한 내용은 이 링크를 확인하십시오, 그리고 여기에 있습니다 Imshow 링크 - 또는 간단히 사용하십시오 help(colors.LinearSegmentedColormap) 그리고 help(imshow).

Alt Text http://img522.imageshack.us/img522/6230/bluep.png

(이것은 표준 옵션의 결과이며 그리드를 추가하고 필터링을 변경할 수 있습니다).


편집하다

하지만 그리드에 숫자를 표시하려고합니다.

간단하게 유지하려면 :

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

다른 팁

Pycairo 당신의 친구입니다. Simple example:

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)

output

당신은 찾을 수 있습니다 이 튜토리얼 도움이 되는.

한 가지 가능성은 파이썬에서 SVG를 생성하는 것입니다. Firefox 또는 Inkscape에서 SVG를 볼 수 있습니다.

다음은 빠른 예입니다.

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

대체 텍스트 http://www.imagechicken.com/uploads/1257184721026098800.png

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top