Параметры 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, вот результат:
цветовая полоса выключена, и я подумал, что хотел бы построить это с 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 строится как:
теперь вот мой вопрос / список вопросов: Мне нравится, как python строит это и хотел бы использовать это, но...
- как мне сделать все "синие", которые представляет " 0 " уйти, как это происходит в моем графике mathematica?
- как повернуть сюжет, чтобы иметь ярко-красное пятно в верхнем левом углу?
- то, как я установил "dpi", это правильно?
- любые полезные ссылки, которые я должен использовать для укрепления моей любви к 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)
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()
список доступных цветных карт по умолчанию здесь. Вам понадобится тот, который начинается с белого.
Если ни один из них не соответствует вашим потребностям, вы можете попробовать создать свой собственный, начните с просмотра LinearSegmentedColormap
.
просто для записи, в Mathematica 9.0:
GraphicsGrid@{{MatrixPlot[l,
ColorFunction -> (ColorData["TemperatureMap"][Rescale[#, {Min@l, Max@l}]] &),
ColorFunctionScaling -> False], BarLegend[{"TemperatureMap", {0, Max@l}}]}}