2015-10-09 2 views
0

У меня есть 3d matplotlib surfaceplot. ось Z - стандартное отклонение (betwen -4, + 4). Я сделал цветную карту, чтобы сделать -4 = красный, 0 белый и +4 зеленый.Matplotlib surface_plot colormap получает отравление от Nan's?

cmap1 = LinearSegmentedColormap.from_list("my_colormap", ((1, 0, 0),(1,.25,.25),(1,1,1), (0.25,1,0.25),(0, 1, 0)), N=15, gamma=1.0) 

Он отлично справился. Но теперь я удалил половину избыточных значений данных, но преобразовал нижнюю треугольную матрицу в NaN (а также (1,1) (2,2) ... (n, n) points = Nan).

Это показывает артефакт, который мне не нравится. Многоугольники, на которых участок поверхности рисуется на границе области с данными, а область с Nans дает яркие красные многоугольники, которые бросают вызов цветовой карте графика. Я прикрепил картину того, что я имею в виду, и в обоих случаях это уродливый и запутанный артефакт I have attached a picture of what I mean, in both both cases it's an ugly and confusing artifact.

Кто-нибудь знает, как я могу это устранить?

ответ

0

Это серьезная работа вокруг и, вероятно, не самая полезная. Но можно преобразовать свой домен так, чтобы ваши действительные значения занимали полный массив. Подумайте об этом как о «растяжении ваших данных». Это приводит к построению сплошной линии.

Он включает в себя создание ваших входов x и y, а затем с помощью scipy's inter2d, чтобы найти соответствующее значение z.

Отвратительное обходное решение, которое я знаю, но это лучшее, что я мог придумать в прошлом.

0

Решение для меня было вместо того, чтобы наложить NaN вдоль (0,0), (1,1) .. (n, n), я сделал эти нули. В остальном я все еще перешел на Нанса. Это устраняет уродливую красную слезу.

вместо raw[np.tril_indices(raw.shape[0],-1)] = np.nan

Я использовал raw[np.tril_indices(raw.shape[0],0)] = np.nan

enter image description here

+0

В качестве альтернативы можно замаскировать значения, а не устанавливать их NaN – tom

Смежные вопросы