提问人:matteo 提问时间:10/12/2023 最后编辑:Trenton McKinneymatteo 更新时间:10/13/2023 访问量:104
find_nearest_contour 已弃用。现在怎么办?
find_nearest_contour is deprecated. Now what?
问:
我正在使用 Matplotlib 等值线来探索 2D 地图。我使用 contour.find_nearest_contour
来获取接近点的轮廓的 x 和 y 范围,如下所示:x0, y0
cs = fig.gca().contour(x, y, image, [level])
cont, seg, idx, xm, ym, d2 = cs.find_nearest_contour(x0, y0, pixel=False)
min_x = cs.allsegs[cont][seg][:, 0].min()
max_x = cs.allsegs[cont][seg][:, 0].max()
min_y = cs.allsegs[cont][seg][:, 1].min()
max_y = cs.allsegs[cont][seg][:, 1].max()
cont, seg, idx, xm, ym, d2 = cs.find_nearest_contour(x0, y0, pixel=False)
现在 Matplotlib v3.8 抛出了一个 ,但我找不到任何解释如何获得相同功能的文档。MatplotlibDeprecationWarning
请注意,给定的轮廓级别可以创建多个线段,我还需要哪个线段更接近我的观点。实际上,我需要在我的代码行中。这不是从私人方法中共享的,这是替换的非常好的候选者。seg
_find_nearest_contour
答:
1赞
Trenton McKinney
10/13/2023
#1
- 继续使用,直到将其移除。
.find_nearest_contour
- 根据 matplotlib 问题 27070 中的此注释,私有方法 ,可以在重新实现公共方法之前使用。
._find_nearest_contour
-
它已被弃用,因为旧的返回值 ...,对于
ContourSets
的新内部表示形式(有一个 Collection,每个级别只有一个路径)没有多大意义 - 如果您有现有代码,则可能需要执行下列操作之一:
- 继续使用 matplotlib 低于 3.8
- 使用最新的实现,并根据新的
Returns
-
- 给定示例代码:
CS.find_nearest_contour(0, 0)
→(5, 0, 296, 209.70308429471964, 168.30113207547168, 72300.65462060366)
CS._find_nearest_contour((0, 0))
→(5, 296, array([209.70308429, 168.30113208]))
import matplotlib.pyplot as plt
import numpy as np
delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2
# Basic contour plot
fig, ax = plt.subplots(figsize=(7, 7))
CS = ax.contour(X, Y, Z)
CS._find_nearest_contour((0, 0)) # private method
Signature: CS._find_nearest_contour(xy, indices=None)
Docstring:
Find the point in the unfilled contour plot that is closest (in screen
space) to point *xy*.
Parameters
----------
xy : tuple[float, float]
The reference point (in screen space).
indices : list of int or None, default: None
Indices of contour levels to consider. If None (the default), all levels
are considered.
Returns
-------
idx_level_min : int
The index of the contour level closest to *xy*.
idx_vtx_min : int
The index of the `.Path` segment closest to *xy* (at that level).
proj : (float, float)
The point in the contour plot closest to *xy*.
File: c:\users\trenton\anaconda3\envs\py312\lib\site-packages\matplotlib\contour.py
Type: method
关于私有方法
评论
0赞
matteo
10/13/2023
谢谢。我编辑了问题以指定我实际上需要由轮廓创建的最近路径,该路径不是由 返回的。此外,固定到 Matplotlib <=3.8 对我们来说是不可行的,所以要么 Matplotlib 创建一个替代方法,要么我需要完全改变策略。_find_nearest_contour
0赞
Trenton McKinney
10/13/2023
@matteo 由于 API 已更改,因此即使它们引入了新的公共方法,也不太可能恢复到以前的功能。另一种选择是在本地存储库中重新引入源代码。matplotlib
contour.find_nearest_contour
评论