gpt4 book ai didi

python - 在 matplotlib 中打开灯

转载 作者:行者123 更新时间:2023-12-05 01:51:22 24 4
gpt4 key购买 nike

我有以下 Python 代码:

import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['figure.figsize'] = [12, 7]

n = 100
m = 100

X = np.arange(-n/2,n/2,1)
Y = np.arange(-m/2,m/2,1)
X, Y = np.meshgrid(X, Y)

landscape = np.exp(-0.01 * (X*X + Y*Y) )

fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_surface(X, Y, landscape,
linewidth=0,
antialiased=False
)

在笔记本中运行会产生这张图片

enter image description here

如果仔细观察,您会发现高斯峰的左侧比右侧稍微亮一点。不过,这种照明效果几乎不可见,我想增加它,以便 3D 形状变得容易看到。

我知道 matplotlib.colors.LightSource ,但无论我做什么,我都无法让它产生我想要的效果。理想情况下,我只想增加“默认”照明的强度,而不是摆弄它。但是,如果有人可以解释如何为这张图片使用 LightSource,那也会有所帮助。

请注意,我不想对图像应用高度贴图,也不想在其上绘制网格线 - 我只想增加照明效果,同时保持表面颜色均匀。

还值得一提的是,我有点受困于 MatPlotLib,因为我使用的是 Jupyterlite。与未安装 Python 的学生共享笔记本,因此我需要一个与之兼容的解决方案。

最佳答案

使用 LightSource 你可以做类似的事情

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.colors import LightSource

plt.rcParams['figure.figsize'] = [12, 7]

n = 100
m = 100

X = np.arange(-n / 2, n / 2, 1)
Y = np.arange(-m / 2, m / 2, 1)
X, Y = np.meshgrid(X, Y)

landscape = np.exp(-0.01 * (X * X + Y * Y))

fig, ax = plt.subplots(subplot_kw={"projection": "3d"})

# this is used to set the graph color to blue
blue = np.array([0., 0., 1.])
rgb = np.tile(blue, (landscape.shape[0], landscape.shape[1], 1))

ls = LightSource()
illuminated_surface = ls.shade_rgb(rgb, landscape)

ax.plot_surface(X, Y, landscape,
linewidth=0,
antialiased=False,
facecolors=illuminated_surface)

enter image description here

如果你想要右边的光改变 LightSource 创建时的 azdeg 参数

ls = LightSource(azdeg=80)

enter image description here

Parameters
----------
azdeg : float, default: 315 degrees (from the northwest)
The azimuth (0-360, degrees clockwise from North) of the light
source.
altdeg : float, default: 45 degrees
The altitude (0-90, degrees up from horizontal) of the light
source.

关于python - 在 matplotlib 中打开灯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72299207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com