- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 Python 3 创建曲面图,现在我想知道为什么它是透明的?有任何想法吗?我希望它看起来像我使用相同数据集使用 MATLAB 创建的图 ETOPO1 .第二个问题,使用 plot_surface 改变纵横比是不可能的,对吧?
最好的,马丁
import numpy as np
from matplotlib import cm
import matplotlib.pyplot as plt
from matplotlib.colors import LightSource
ETOPO1 = np.flipud(ETOPO1)
lon = np.arange(30,60+1/60,1/60)
lat = np.arange(-20,20+1/60,1/60)
LON,LAT = np.meshgrid(lon,lat)
fig, ax2 = plt.subplots(subplot_kw={"projection": "3d"})
ls = LightSource(270,45)
rgb = ls.shade(ETOPO1,
cmap=cm.gist_earth,
vert_exag=0.1,
blend_mode='hsv')
ax2.plot_surface(LON,LAT,ETOPO1,
rstride=1, cstride=1,
linewidth=0,
facecolors=rgb,
antialiased=True,
shade=True)
ax2.view_init(60, 20-90)
ax2.tick_params(axis='both', labelsize=6)
ax2.grid(False)
plt.show()
编辑 2021 年 12 月 1 日
这里有几个相关的问题:
如果我使用 rstride=5、cstride=5,上面的代码需要 15 秒,但如果我使用全分辨率 rstride=1、cstride=1,则需要 318 秒 = 5.3 分钟。这是令人惊讶的,因为 MATLAB 需要 0.14 秒才能获得完整分辨率——为什么?
我尝试使用以下方法在曲面顶部添加轮廓
v = np.array([500,1000,2000,3000])
ax2.contour(LON,LAT,ETOPO1+1,
levels=v,linewidths=0.3,
colors='r',linestyles='solid')
但是,尽管向 ETOPO1 添加 1、10 或 100,它们总是被表面隐藏。
我尝试使用 ETOPO1 保存图形,我
plt.savefig('etopo1_python.png',dpi=300)
但在 PNG 文件中得到一个空图像。有什么想法吗?
自
antialiased=True
导致透明,问题来了,是不是bug?
最佳答案
根据 this answer这是 plot_surface()
函数的一个已知问题。
This other answer建议在 plot_surface()
中设置 antialiased=False
,这对我对您的数据有效。但是,我没有仔细查看它是否引起任何问题。
如下所示,您可以通过添加类似 ax.set_box_aspect((1, 1, 0.1))
的内容来调整纵横比(下面我计算了 Z
参数实现一些所需的近似垂直夸大,但你明白了)。
import numpy as np
from matplotlib import cm
from matplotlib.colors import LightSource
import matplotlib.pyplot as plt
url = 'http://141.89.112.21/wp-content/uploads/2021/11/etopo1_data_python.txt'
ETOPO1 = np.loadtxt(np.DataSource().open(url), skiprows=5)
h, w = ETOPO1.shape
lon = np.linspace( 30, 60, w) # linspace recommended for non-integer intervals.
lat = np.linspace( 20, -20, h) # Reverse this instead of flipping the array.
LON, LAT = np.meshgrid(lon, lat)
fig, ax = plt.subplots(figsize=(20, 15),
subplot_kw={"projection": "3d"})
ve = 200 # Approx. vertical exaggeration.
ax.set_box_aspect((1, 1, ve/1850))
rgb = LightSource(270, 45).shade(ETOPO1,
cmap=cm.Blues_r,
blend_mode='soft',
vert_exag=ve/1850)
ax.plot_surface(LON, LAT, ETOPO1,
rstride=2, cstride=2,
facecolors=rgb,
antialiased=False)
ax.view_init(20, -70)
ax.tick_params(axis='both', labelsize=6)
ax.grid(False)
plt.show()
这会产生:
关于Python:为什么 plot_surface 是透明的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70136084/
我试图了解如何构建用于 plot_surface(在 Axes3d 中)的数组。 我试图构建一个简单的表面处理这些数组的数据: In [106]: x Out[106]: array([[0, 0],
我尝试使用 Python 3 创建曲面图,现在我想知道为什么它是透明的?有任何想法吗?我希望它看起来像我使用相同数据集使用 MATLAB 创建的图 ETOPO1 .第二个问题,使用 plot_surf
我正在尝试制作 3D 绘图,因为 Wolfram 无法处理 eq.但Python似乎也有麻烦。我基本上使用了冲浪图示例:http://matplotlib.org/mpl_toolkits/mplot
我在尝试获取数据阵列的曲面图时遇到问题。 (请参阅下面的小测试数据样本)。 这是我用来测试我遇到的不同方法的基本代码。 import numpy as np import matplotlib.pyp
我正在尝试根据一组指定 z 值的数据绘制 3D 表面。尽管我设置了 alpha=1.0,但我得到了一些奇怪的透明人工制品,在那里我可以透过表面看到。 在绘图和保存到文件(png 和 pdf 格式)时都
我用 Python 中的一些数据绘制了曲面图。 现在我试图改变这样一个情节的风格。但不幸的是,我陷入了线条颜色。它默认为黑色,但我想将其设为红色或任何其他颜色。 我的代码是: from mpl_too
我已经修改了 mplot3d example code在保罗的帮助下我的申请。代码如下: from mpl_toolkits.mplot3d import Axes3D import matplotl
我正在尝试使用 matplotlib 绘制地形高程数据。我构建了一个 nx3 numpy 数组,每行包含我的点的 x、y、z 坐标(它们在 x、y 平面上的网格中有规律地间隔)。我试图用这段代码绘制它
我想将 MATLAB 中的 surf 命令转换为 matplotlib 中的 plot_surface 命令。 我面临的挑战是在 plot_surface 命令中使用 cmap 函数对曲面进行渐变
我有以下数据: https://www.dropbox.com/s/u7ee09chaixw5vb/draw?dl=0 在python3中使用pickle保存,它只是一个二维的python列表,形式为
我正在尝试做 this和我的 data具有以下结构: 0.90000000 0.90000000 -2133.80472139 0.90000000 0.95000000 -2133.84
我是 matplotlib 的新用户。使用 matplotlib 和 plot_surface 绘制曲面 (3D) 时,会出现一个带有图形的窗口。在该窗口中,右下角有鼠标实际位置的坐标。是否有可能访问
我有以下 python 代码,它显示以下 3D 图。 我的代码是: from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot a
我正在尝试使用 facecolors 以预定义的颜色为表面着色 3D。这里的问题是 cm.ScalarMappable 规范化表面 V 的颜色,而 plt.cm.jet 不规范化,因此颜色和颜色条不匹
我正在使用 MatPlotLib 的 plot_surface 方法生成 3D 表面,然后将其保存为 PDF 文件。我可以通过“linewidth=0”隐藏表面线条,但在保存为 PDF 后线条再次出现
我已经从一个文件创建了一个 3D 绘图表面,并且我正在尝试为该绘图制作动画。我已经阅读了 matplotlib 网页中的示例和 SO 中的其他示例,并注意到我需要创建一个更新函数来遍历文件中的值,然后
我有一些代码可以使用 matplotlib 在 Python 中绘制 3D 表面: import math import numpy as np import matplotlib.pyplot as
我尝试构建一个最小示例来重现我遇到的问题。请忽略随机生成的数据数组 x 和 y。我将非常有意义的数据输入到 plot_surface 内的 zSpline 调用中。您可以尝试将倒数第二行替换为 - s
我是一名优秀的程序员,十分优秀!