سؤال

أريد أن أخلق تصويري بسيط في بيثون. يبدو أن Matplotlib لديه الكثير من الميزات ولكن لا شيء يغطي مثالي شبكة Heatmap البسيطة.

Infographic عبارة عن شبكة بسيطة 5 × 5 شبكة مع أرقام داخل تتراوح من 0 إلى 1. ستكون مربعات الشبكة بعد ذلك ملونة في 0 = أبيض 1 = الأزرق 0.5 كونها أزرق شاحب.

من المحتمل أن تستخدم Matplotlib لكن لم أتمكن من العثور على أي أمثلة أوجوها في أي أمثلة عرضت نظرة ثاقبة على توليد هذا.

أي رؤية، مثال رمز أو اتجاه المكتبة سوف يساعد حقا

تحيات مات

هل كانت مفيدة؟

المحلول

ذلك يعتمد على ما عليك القيام به مع الرسم البياني بمجرد أن يكون لديك، matplotlib. يتيح لك إظهار الرسم البياني بشكل تفاعلي على الشاشة، وحفظه بتنسيق ناقلات PDF أو 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 تحقق من هذا الرابط, ، وهنا هو رابط لامع - أو مجرد استخدام help(colors.LinearSegmentedColormap) و help(imshow).

نص Alt 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")

نصائح أخرى

باكرو هو صديقك. مثال بسيط:

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 من بيثون. يمكنك عرض SVG في Firefox أو Inkscape.

إليك مثال سريع وقذر:

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