python - 如何在 matplotlib 3D 曲面图上突出显示切片?
问题描述
我有一个 3D 曲面图。我还想在 2D 中绘制该图的切片,并以某种方式在 3D 图上指示切片的来源(例如为切片上的点着色以“突出显示”切片,或绘制相交平面或其他东西)。
以下是一个示例,我只是将特定行设置为 0,以便可以看到切片在 3D 图上的位置。
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
# Grid and test function
N = 29;
x,y = np.linspace(-1,1, N*2), np.linspace(-1,1, N)
X,Y = np.meshgrid(x,y)
F = lambda X,Y : np.sin(10*X)/(1+5*(X**2+Y**2))
Z = F(X,Y)
# 3D Surface plot
plt.figure(figsize = (5,6))
Z2 = Z.copy(); Z2[10,:] = 0 # <----- Replace this code
ax = plt.subplot(211, projection='3d')
ax.plot_surface(X,Y,Z2)
# 2D Plot of slice of 3D plot
plt.subplot(212)
plt.plot(x,Z[10,:])
plt.show()
plt.savefig('surfacePlotHighlight.png')
解决方案
您可以对以与其他颜色不同的颜色显示的行着色。
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
# Grid and test function
N = 29;
x,y = np.linspace(-1,1, N*2), np.linspace(-1,1, N)
X,Y = np.meshgrid(x,y)
F = lambda X,Y : np.sin(10*X)/(1+5*(X**2+Y**2))
Z = F(X,Y)
y0 = 10
norm=plt.Normalize(Z.min(), Z.max())
C = plt.cm.Blues_r(norm(Z)/2)
C[y0] = plt.cm.Reds_r(norm(Z[y0])/2)
# 3D Surface plot
plt.figure(figsize = (5,6))
ax = plt.subplot(211, projection='3d')
ax.plot_surface(X,Y,Z, facecolors=C)
# 2D Plot of slice of 3D plot
plt.subplot(212)
plt.plot(x,Z[y0,:], color=plt.cm.Reds(.7))
plt.show()
推荐阅读
- .net - 从 .net 服务全屏打开 JPG 文件
- r - 将变量下移一位
- java - org.hibernate.internal.util.xml.XMLHelper。
(Lorg/hibernate/boot/registry/classloading/spi/ClassLoaderService 但它不存在 - c++ - 如果不使用模板类中的定义,是否应该实例化它?
- php - 通过网络将字符串写入php中的文件
- r - 将数据拆分为测试集和训练集时出错(无替换抽样)
- amazon-web-services - 使用当前日期在 AWS S3 存储桶中创建一个文件夹
- c - 使用格式说明符进行转换
- jquery-mobile - jquery 在第一页而不是我的
- php - 如何缩小大图像并保持质量?