Контурная диаграмма Matplotlib с использованием определенных точек данных из набора - PullRequest
0 голосов
/ 02 июля 2018

Мне очень жаль громоздкое название, но я не нахожу способа выразить это ясно. Задача, которую я должен выполнить здесь, состоит в том, чтобы получить три отдельных массива, содержащих координатные матрицы (X, Y) и оценку реальной функции в этой сетке (Z); получить контурные графики данных. Однако некоторые координаты уступают неприемлемым значениям Z и не должны рассматриваться на графиках. Что я сделал до сих пор:

cmap = plt.cm.get_cmap("winter")
cmap.set_under("magenta")
cmap.set_over("yellow")

with PdfPages('myplot.pdf') as pdf:
     fig = plt.figure()
     CS = plt.contourf(X, Y, Z, cmap=cmap)
     cbar = plt.colorbar(CS)
     cbar.ax.set_ylabel('Z')
     plt.xlabel('X (\AA)')
     plt.ylabel('Y (\AA)')
     plt.tight_layout()
     pdf.savefig(fig)

Однако я не нахожу должного способа ограничить значения, которые следует учитывать на графиках (что-то вроде Zmin < Z < Zmax). Я думал о методах set_under и set_over из cmap, но, похоже, это не так. Любое предложение об этой проблеме? Заранее большое спасибо.

1 Ответ

0 голосов
/ 02 июля 2018

Существует несколько способов достижения желаемого эффекта:

1) ограничьте значения Z напрямую, как показано ниже, затем построите результирующий массив:

Z2 = Z.copy()
Z2[Z<Zmin] = Zmin
Z2[Z>Zmax] = Zmax
CS = plt.contourf(X, Y, Z2, cmap=cmap)

2) измените масштаб вашей цветовой шкалы, используя аргументы vmin и vmax:

CS = plt.contourf(X, Y, Z, cmap=cmap, vmin=Zmin, vmax=Zmax)

Edit:

Неправильно прочитал ваш вопрос / намерение. Если вы хотите пометить значения вне диапазона, затем либо установите для них значение NaN (в этом случае соответствующие местоположения будут белыми), либо используйте ваш подход set_under / set_over вместе с аргументами vmin и vmax.

1) установить значения вне диапазона на NaN:

Z2 = Z.copy()
Z2[Z<Zmin] = np.nan
Z2[Z>Zmax] = np.nan
CS = plt.contourf(X, Y, Z2, cmap=cmap)

2) set_under и set_over, затем установите пределы, используя аргументы vmin и vmax:

cmap.set_under("magenta")
cmap.set_over("yellow")
CS = plt.contourf(X, Y, Z, cmap=cmap, vmin=Zmin, vmax=Zmax)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...