Параметры Python Pylab pcolor для участков качества публикации

Я пытаюсь сделать DFT (дискретные преобразования Фурье) графики, используя pcolor в python. Ранее я использовал Mathematica 8.0 для этого, но я обнаружил, что цветовая панель в mathematica 8.0 имеет плохую корреляцию один к одному с данными, которые я пытаюсь представить. Например, вот данные, которые я строю:

[[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, вот результат:

DFT plot with mathematica 8.0

цветовая полоса выключена, и я подумал, что хотел бы построить это с 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 строится как:

DFT plot in python with pcolor

теперь вот мой вопрос / список вопросов: Мне нравится, как python строит это и хотел бы использовать это, но...

  1. как мне сделать все "синие", которые представляет " 0 " уйти, как это происходит в моем графике mathematica?
  2. как повернуть сюжет, чтобы иметь ярко-красное пятно в верхнем левом углу?
  3. то, как я установил "dpi", это правильно?
  4. любые полезные ссылки, которые я должен использовать для укрепления моей любви к python?

Я просмотрел другие вопросы здесь и руководство пользователя для numpy, но не нашел большой помощи.

я планирую опубликовать эти данные, и это очень важно, чтобы я все сделал правильно! :)

Edit:

модифицированный код 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)

Improved python code's output DFT plot

2 ответов


следующее приблизит вас к тому, что вы хотите:

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

список доступных цветных карт по умолчанию здесь. Вам понадобится тот, который начинается с белого.

enter image description here

Если ни один из них не соответствует вашим потребностям, вы можете попробовать создать свой собственный, начните с просмотра LinearSegmentedColormap.


просто для записи, в Mathematica 9.0:

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

enter image description here