Python でインフォグラフィックを作成する
-
12-09-2019 - |
質問
Pythonで簡単なインフォグラフィックを作成したいと考えています。Matplotlib には多くの機能があるようですが、私の単純なヒートマップ グリッドの例をカバーするものは何もありません。
インフォグラフィックは、内部に 0 から 1 の範囲の数字が入った単純な 5 x 5 グリッドです。グリッドの正方形は、0=白、1=青、0.5 は淡い青で色付けされます。
Matplotlib を使用できる可能性がありますが、これを生成するための洞察を提供する例を見つけたり組み合わせたりすることができませんでした。
洞察、サンプルコード、またはライブラリの方向性があれば本当に役立ちます
よろしくマット
解決
それはあなたがそれを持っていたら、グラフで何をする必要があるかによって異なり、 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)
カラーマップの詳細についてはこのリンクをチェックしますに、ここでは、関数imshow のリンクあり - あるいは単にhelp(colors.LinearSegmentedColormap)
とhelp(imshow)
を使用する
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 にあなたの友達です。簡単な例:
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)
このチュートリアルnoreferrer">
1 つの可能性は、Python から SVG を生成することです。SVG は Firefox または Inkscape で表示できます。 以下に簡単な例を示します。 代替テキスト http://www.imagechicken.com/uploads/1257184721026098800.pngimport 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>')