Как объединить графики с множественной плотностью в matplotlib? - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь объединить несколько графиков плотности в один график плотности, и между ними есть области с перекрытием.

Я пробовал, но то, что я получил, похоже на рисунок ниже. Кажется, что график плотности находится на вершине других графиков.

enter image description here

Я хочу, чтобы перекрывающиеся области были объединены. Затем строится график с одной плотностью.

Вот мой код.

#import libraries
import numpy as np
import numpy.ma as ma
import matplotlib.pyplot as plt
%matplotlib inline

plt.figure()
ax=plt.gca()
ax.set_ylim([-5,5]);
ax.set_xlim([-5,5]);

def Z(x1,y1,n):
    x      = np.linspace(-5, 5, 1000)
    X, Y   = np.meshgrid(x, x)
    Z1     = np.sin(n * X) * np.cos(n * Y)
    mask   = (X - x1) ** 2 + (Y - y1) ** 2 > 1
    Z1     = ma.masked_where(mask, Z1)
    plt.pcolormesh(X, Y, Z1, cmap='rainbow')

Z(0,-1,1)
Z(0,0,2)
Z(0,1,1)

plt.show()

1 Ответ

0 голосов
/ 21 января 2020

Я сделал еще одну попытку. Кажется, это работает.

#import libraries
import numpy as np
import numpy.ma as ma
import matplotlib.pyplot as plt
%matplotlib inline

plt.figure()
ax=plt.gca()
ax.set_ylim([-5,5]);
ax.set_xlim([-5,5]);

x      = np.linspace(-5, 5, 1000)
X2, Y2   = np.meshgrid(x, x)

def Z(x1,y1,n):
    Z1     = np.sin(n * X2) * np.cos(n * Y2)
    Z1     = np.where((X2 - x1) ** 2 + (Y2 - y1) ** 2 > 1, 0, Z1)
    return Z1

def mask(x1,y1):
    mask = (X2 - x1) ** 2 + (Y2 - y1) ** 2 > 1
    return mask


ZZ = Z(0,-1,1) +  Z(0,0,2) + Z(0,1,1)

mask = mask(0,-1) & mask(0,0) & mask(0,1)
ZZ = ma.masked_where(mask, ZZ)

plt.pcolormesh(X2, Y2, ZZ, cmap='rainbow')


plt.show()

Вот результат. Любые комментарии приветствуются.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...