Сгенерируйте тот же график поверхности в Matlab и python - PullRequest
0 голосов
/ 14 июля 2020

Этот сценарий matlab

#create data
x = linspace(-10,10,50);
y = linspace(-10,10,50);
[X, Y] = meshgrid (x,y);
Z = cos(sqrt(X.^2 + Y.^2));

#plot data
h = figure;
figsize = [20 7];
set (h,'papersize', figsize)
set (h,'paperposition',[0,0,figsize])

#left plot
subplot(1,2,1)
surfc(X,Y,Z,'linestyle','-');
view(295,60)
title("Title")
xlabel("x")
ylabel("y")
zlabel("z")
xlim ([min(x) max(x)])
ylim ([min(y) max(y)])
zlim ([-1 1])
caxis([-1 1])

#right plot
subplot(1,2,2)
surface(X,Y,Z,'linestyle','-');
colorbar ();
xlabel("x")
ylabel("y")
zlabel("z")
xlim ([min(x) max(x)])
ylim ([min(y) max(y)])
zlim ([-1 1])
caxis([-1 1])

генерирует следующий график matlab

I would like to do the same plot in python. This is how close I could get

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns 

#create data
x = np.linspace(-10 , 10)
y = np.linspace(-10 , 10)
X, Y = np.meshgrid(x, y)
Z = np.cos(np.sqrt(X**2 + Y**2))

#plot data
fig = plt.figure(figsize = (20,7))

#left plot
ax1 = fig.add_subplot(1,2,1, projection = '3d')
ax1.grid(True , which = 'both')
ax1.plot_surface(X ,Y ,Z , cmap='viridis', edgecolor='black')
ax1.set_title("Title")
ax1.set_xlabel("x")
ax1.set_ylabel("y")
ax1.set_zlabel("z")
ax1.set_xlim(x.min(), x.max())
ax1.set_ylim(y.min(), y.max())
ax1.set_zlim(-1,1)

#right plot
ax2 = fig.add_subplot(1,2,2)
ax2.grid(True , which = 'both')
sns.heatmap(Z ,xticklabels = x, yticklabels = y, cmap='viridis')  
ax2.set_xlabel("x")
ax2.set_ylabel("y")

python

Наиболее очевидно, что отметки на правом графике необходимо улучшить.

Как я могу установить черные линии вокруг графика и шкалы цветов, а также сетку для правильного графика? Как мне установить zlim на [-1 1]? На графике Matlab есть контурные линии в плоскости xy. Есть ли у python аналогичная функция? Я бы также предпочел, чтобы левый и правый график имели тот же размер, что и в Matlab.

...