2016-08-01 4 views
1

N=512ピクセルの画像に対して2dハニングウィンドウ関数をベクトルグラフィックスとして表示したい(*.svg*.eps、(ベクトル化!)*.pdf程度)... だから私はカラーバーで2d関数からベクターグラフィックス(ヒートマップ)を作成する

w(x,y) = sin(x*pi/N)^2 * sin(y*pi/N)^2 

2D機能をプロットする必要があり、このための私のソリューションは、最初のpythonた:

import numpy as np 
from PIL import Image 

im_hanning = Image.new("F", (N, N)) 
pix_hanning = im_hanning.load() 

for x in range(0, N): 
    for y in range(0, N): 
     pix_hanning[x,y] = np.sin(x*np.pi/N)**2 * np.sin(y*np.pi/N)**2 * 255 

im_hanning = Image.fromarray(array) 

結果がこの写真です: hanning window with python

しかし、これはもちろんラスターグラフィックスです。

だから私はgnuplotで試しました。私は結果を見たまでは良く見えた:

set xrange [0:1] 
set yrange [0:1] 
unset xtics 
unset ytics 

set pm3d map 
set size square 

set samples 512 
set isosamples 512 
set palette gray 

splot sin(x*pi)**2 * sin(y*pi)**2 

を私はそれはひどい見えた他に、サンプルを高めなければならなかった...結果は正常に見える: hanning window function with gnuplot

私は特に右のカラーバーのような。しかし、これは(私が設定した端末に関係なく)ラスタグラフィックを再び生成します。

2次元関数をベクトルグラフィックとしてプロットする可能性はありますか? PDF、SVGまたはEPS端子付き

+0

私が今見ているもの:画像のグラデーションは同じではありません。 「正しい」勾配とは何ですか、何が間違っていますか?私は何かが恋しいですか? – nox

答えて

1

、gnuplotのはあなたのベクタグラフィックスを与えるん。 しかし、関数は何らかの形で表現されなければならず、gnuplotは区分的線形補間を行います。すなわち、面は、サンプリングによって設定される面の小さな部分(三角形または四角形)で表されます。レート。

無限に拡張可能なカラーマップが必要な場合は、それを作成する方法は、使用しているスケーラブルなベクター言語のプリミティブでなければなりません。 SVG。だからこれはあなたの本当の疑問です:グラデーションsin(x*pi)**2 * sin(y*pi)**2を表すSVG/PDF/EPSプリミティブがありますか?私はこれが事実ではないと信じています、色のグラジエントも区分的に線形のAFAIKですが、この方法で尋ねると、専門家からの回答が得られるかもしれません。

+0

正しい方向を指してくれてありがとう。もちろん、私はベクターグラフィックを手に入れましたが、私が手に入れたいものはありません。 – nox

関連する問題