6

Pythonを使用して DFT (離散フーリエ変換) プロットを作成しようとしていますpcolor。これを行うために以前 Mathematica 8.0 を使用していましたが、Mathematica 8.0 のカラーバーは、表現しようとしているデータとの 1 対 1 の相関が悪いことがわかりました。たとえば、ここに私がプロットしているデータがあります:

[[0.,0.,0.10664,0.,0.,0.,0.0412719,0.,0.,0.],
[0.,0.351894,0.,0.17873,0.,0.,0.,0.,0.,0.],
[0.10663,0.,0.178183,0.,0.,0.,0.0405148,0.,0.,0.],
[0.,0.177586,0.,0.,0.,0.0500377,0.,0.,0.,0.],
[0.,0.,0.,0.,0.0588906,0.,0.,0.,0.,0.],
[0.,0.,0.,0.0493811,0.,0.,0.,0.,0.,0.],
[0.0397341,0.,0.0399249,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.]]

そのため、DFT マトリックス内の多数のゼロまたは小さな数値、または少量の高周波エネルギーです。

これを mathematica を使用してプロットすると、次の結果が得られます。

Mathematica 8.0によるDFTプロット

カラーバーがオフになっているので、代わりにこれを python でプロットしたいと思いました。私のpythonコード(ここからハイジャックしたもの)は次のとおりです。

from numpy import corrcoef, sum, log, arange
from numpy.random import rand
#from pylab import pcolor, show, colorbar, xticks, yticks
from pylab import *


data = np.array([[0.,0.,0.10664,0.,0.,0.,0.0412719,0.,0.,0.],
[0.,0.351894,0.,0.17873,0.,0.,0.,0.,0.,0.], 
[0.10663,0.,0.178183,0.,0.,0.,0.0405148,0.,0.,0.],
[0.,0.177586,0.,0.,0.,0.0500377,0.,0.,0.,0.],
[0.,0.,0.,0.,0.0588906,0.,0.,0.,0.,0.],
[0.,0.,0.,0.0493811,0.,0.,0.,0.,0.,0.],
[0.0397341,0.,0.0399249,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.]], np.float)

pcolor(data)
colorbar()
yticks(arange(0.5,10.5),range(0,10))
xticks(arange(0.5,10.5),range(0,10))
#show()
savefig('/home/mydir/foo.eps',figsize=(4,4),dpi=100)

そして、この python コードは次のようにプロットされます。

pcolorを使用したPythonでのDFTプロット

ここに私の質問/質問のリストがあります:Pythonがこれをプロットする方法が好きで、これを使用したいのですが...

  1. Mathematica プロットのように、「0」を表すすべての「青」を消すにはどうすればよいですか?
  2. プロットを回転させて、左上隅に明るい赤いスポットを配置するにはどうすればよいですか?
  3. 「dpi」の設定方法は正しいですか?
  4. Python への愛を強めるために使用すべき参考資料はありますか?

ここで他の質問とnumpyのユーザーマニュアルを調べましたが、あまり役に立ちませんでした。

私はこのデータを公開する予定であり、すべての断片を正しく取得することが非常に重要です!:)

編集:

変更された python コードと結果のプロット! これを出版に値するものにするために、これにどのような改善を提案しますか?

from numpy import corrcoef, sum, log, arange, save
from numpy.random import rand

from pylab import *


data = np.array([[0.,0.,0.10664,0.,0.,0.,0.0412719,0.,0.,0.],
[0.,0.351894,0.,0.17873,0.,0.,0.,0.,0.,0.],
[0.10663,0.,0.178183,0.,0.,0.,0.0405148,0.,0.,0.],   
[0.,0.177586,0.,0.,0.,0.0500377,0.,0.,0.,0.],
[0.,0.,0.,0.,0.0588906,0.,0.,0.,0.,0.],
[0.,0.,0.,0.0493811,0.,0.,0.,0.,0.,0.],
[0.0397341,0.,0.0399249,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.],
[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.]], np.float)

v1 = abs(data).max()
v2 = abs(data).min()
pcolor(data, cmap="binary")
colorbar()
#xlabel("X", fontsize=12, fontweight="bold")
#ylabel("Y", fontsize=12, fontweight="bold")
xticks(arange(0.5,10.5),range(0,10),fontsize=19)
yticks(arange(0.5,10.5),range(0,10),fontsize=19)
axis([0,7,0,7])
#show()


savefig('/home/mydir/Desktop/py_dft.eps',figsize=(4,4),dpi=600)

改善された Python コードの出力 DFT プロット

4

2 に答える 2

9

以下は、あなたが望むものに近づくでしょう:

import matplotlib.pyplot as plt

plt.pcolor(data, cmap=plt.cm.OrRd)
plt.yticks(np.arange(0.5,10.5),range(0,10))
plt.xticks(np.arange(0.5,10.5),range(0,10))
plt.colorbar()
plt.gca().invert_yaxis()
plt.gca().set_aspect('equal')
plt.show()

デフォルトで利用可能なカラーマップのリストはこちらです。白から始まるものが必要です。

ここに画像の説明を入力

これらのいずれもニーズに合わない場合は、独自の生成を試すことができますLinearSegmentedColormap

于 2013-04-13T15:11:59.743 に答える
3

記録のために、Mathematica 9.0 では次のようになります。

GraphicsGrid@{{MatrixPlot[l, 
    ColorFunction -> (ColorData["TemperatureMap"][Rescale[#, {Min@l, Max@l}]] &), 
    ColorFunctionScaling -> False], BarLegend[{"TemperatureMap", {0, Max@l}}]}}

ここに画像の説明を入力

于 2013-04-13T16:02:34.530 に答える