2017-06-11 20 views
0

まあ、Python 3とPython 2 ... code differencesを並べ替えた後、私がかなり理解していないコードを改造しようとすると、私はこのコードを取得するために使用される3Dプロット届かない理由を私は見ていない。この場合には2〜3:明らかにPython 3と比べてPython 2のフラットなplot_surface

%matplotlib inline 

import numpy as np 
import matplotlib.pyplot as plt 
import pylab as pylab 
from mpl_toolkits.mplot3d import Axes3D 
from matplotlib.colors import LogNorm 

f = lambda x, y: 10 * np.cos(1 * x) * 15 * np.sin(1/2 * y) + 150 
xmin, xmax, xstep = -4.5, 4.5, .2 
ymin, ymax, ystep = -4.5, 4.5, .2 

x, y = np.meshgrid(np.arange(xmin, xmax + xstep, xstep), np.arange(ymin, ymax + ystep, ystep)) 

z = f(x, y) 

fig = plt.figure(figsize=(8, 5)) 
ax = plt.axes(projection='3d', elev=50, azim=-50) 
ax.plot_surface(x, y, z, norm=LogNorm(), rstride=1, cstride=1, 
       edgecolor='none', alpha=.8, cmap=plt.cm.jet) 

enter image description here

は、右のプロットは、右側にあります上記画像の、ウォルフラムアルファに同じ式を差し込むことによって示されるように:

enter image description here

答えて

1

これは実際にはhereと記載されている分割の変更によるものです。パイソン2右側の3Dプロットを生成させるためには2つの方法があります

  1. あなたのコードの前にfrom __future__ import divisionを置きます。
  2. 使用0.5なく、反対側の回線に1/2f = lambda x, y: 10 * np.cos(1 * x) * 15 * np.sin(1/2 * y) + 150

、Pythonの3ラインf = lambda x, y: 10 * np.cos(1 * x) * 15 * np.sin(1/2 * y) + 150に代わり1/20を使用し、左側の「フラット」プロットを生成するために。

私はそれがすべてをカバーするかどうかはわからないけど、the documentは、実際に多くの詳細を説明し、チェックする価値があるかもしれません。

関連する問題