2012-04-23 3 views
2

У меня есть набор данных, который содержит координаты x и y и вычисленное значение для каждой координаты. Сетка нерегулярна, поэтому на данный момент я создаю график рассеяния и разделяю значения на бункеры для отображения в виде контура, как на img по ссылке ниже. http://i.stack.imgur.com/m7XHm.pngКонтур Matplotlib с пустыми областями

Я хочу усовершенствовать этот метод, используя функцию imshow/contour в matplotlib, используя meshgrid, а затем интерполируя вычисленные значения. Я могу заставить это работать нормально, но в итоге у меня возникла проблема с тем, что он теряет области изображения без данных (пустоты в реальной жизни) и присоединяется к ним, как показано на изображении по ссылке ниже для тех же данных. http://i.stack.imgur.com/ZCRog.png

Я попытался найти лучший способ сделать это, но я не нашел никакой помощи в этом. У кого-нибудь есть предложения?

Я думаю, что мне нужно изменить метод на стадии meshgrid, но я не уверен в этом. За что его стоит мой код ниже

x=nodalData[:,1] #array of x values from input file 
    y=nodalData[:,2] #array of y values from input file 

    #define the linear grid 
    xi, yi = np.linspace(x.min(), x.max(), 100), np.linspace(y.min(), y.max(), 100) 
    xi, yi = np.meshgrid(xi, yi) 

    z=Rres #array calculated elsewhere corresponding to x,y pair 

    #interpolate 
    zi = scipy.interpolate.griddata((x, y), z, (xi, yi), method='cubic') 
    #plot  
    plt.imshow(zi, vmin=z.min(), vmax=z.max(), origin='lower', extent=[x.min(), x.max(), y.min(), y.max()]) 
+0

Вы хотите ** маскировать ** некоторые регионы, правильно? проверьте этот [пример] (http://matplotlib.sourceforge.net/examples/pylab_examples/contourf_demo.html) ... – carla

+0

Проблема в том, что положение маскированных областей изменяется в зависимости от входов. В идеале я бы хотел, чтобы сетка точек была контурной, чтобы в первую очередь не включать в себя пустоты данных, если это возможно. – LCSA

ответ

0

Сво странная проблема, так как точка интерполяции найти разумные оценки для регионов, где нет достаточных данных. Я бы предложил либо принять, что новый сюжет имеет интерполированные значения, и поэтому его нормально, если области «нет данных» больше не присутствуют. Или, вы можете поставить data voids обратно после интерполяции, используя ваш первый сюжет в качестве маски, например.

+0

То, что я пытаюсь достичь, - это лучшая визуализация данных, которые, по моему мнению, достигаются контурным сюжетом. Данные представляют собой перекрытия зданий, и поэтому есть некоторые области, которые не имеют плиты на месте - интерполяция в эти области вводит в заблуждение. Из того, что я знаю о маскировке, это было бы трудно для областей пустот, которые бы отличались в каждой ситуации, поэтому я надеялся не полагаться на маскировку после интерполяции. Вместо этого я задавался вопросом, можно ли добавить пустоты в исходную сетку? – LCSA

+0

@LCSA - Похоже, что вы можете избежать интерполяции в эти регионы, исключив их из своих точек данных «xi, yi» (т. Е. Исключите их, выполните интерполяцию, верните исходные точки). Кроме того, я думаю, что ссылка, размещенная в ваших комментариях выше, может позволить вам маскировать до интерполяции, что может быть другим способом сделать это (хотя я нашел scipy, чтобы не уважать numpy-маски в прошлом, поэтому я не уверен). – fraxel

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