【问题标题】:How to interpolate/display 2D data and invert 2D interpolations如何插值/显示 2D 数据和反转 2D 插值
【发布时间】:2021-01-19 10:54:20
【问题描述】:

我正在处理以下结构的 csv 数据集:

https://i.stack.imgur.com/nLqiq.png

理想情况下,我想找到一个插值函数 c = c(a, b) 然后反转它,也就是说,我可以指定一个值 c,它会返回一个数字或数字数组,这样插值功能形式成立。与

 df = pd.read_csv('data.txt', sep=",", header=None)     
 plt.tricontourf(df.a.values, df.b.values, df.c.values, 50) 
 plt.plot(df.a.values, df.b.values, 'k+', markersize = 3, alpha=0.3, color='white')

我似乎非常接近某种插值(尽管我不明白这种插值是如何计算的):

但是,从这里我不知道如何获得插值函数(我也尝试过使用 interpol2D,但在这里也没有运气)特别是如何从那里反转它。最好的方法是什么?我使用的数据集可以找到here

【问题讨论】:

  • 也许你可以调用plt.tricontour(df.a.values, df.b.values, df.c.values, levels=[specific_c]) 来绘制与特定 c 值(或 c 值列表)相对应的曲线。或者,您还可以提取这些曲线:extracting values from contour lines.
  • 请不要将数据/代码/错误消息作为图片发布。在 SO 上直接在此处发布文本。

标签: python matplotlib interpolation


【解决方案1】:

您可以调用plt.tricontour(df.a.values, df.b.values, df.c.values, levels=[specific_c]),它会绘制与特定 c 值(或 c 值列表)相对应的曲线。或者,您可以提取这些曲线:extracting values from contour lines

轮廓算法的工作方式可能是首先将点划分为三角形(Delaunay triangulation)。对于填充轮廓,为每个三角形顶点分配一种颜色,并对这些颜色进行插值 (Gouraud shading)。对于线条轮廓,在顶点位于所选 c 值不同边的每个三角形上,对三角形边缘的值进行插值并用线条连接它们。

这是一个说明性的例子:

import numpy as np
import matplotlib.pyplot as plt

a = np.random.uniform(-1.5, 1.5, 5000)
b = np.random.uniform(-1.5, 1.5, 5000)
c = (a ** 2 + b ** 2 - 1) ** 3 - a ** 2 * b ** 3
fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, figsize=(14, 4), sharex=True, sharey=True,
                                    gridspec_kw={'width_ratios': [5, 4, 4]})
cntf = ax1.tricontourf(a, b, c, levels=np.linspace(-2, 2, 101), cmap='RdYlGn')
plt.colorbar(cntf, ax=ax1)
cnt = ax2.tricontour(a, b, c, levels=[0], colors='crimson', linewidths=4)

verts = np.concatenate([p.vertices for p in cnt.collections[0].get_paths()])
ax3.scatter(verts[:, 0], verts[:, 1], s=1, c='turquoise')
plt.show()

【讨论】:

  • 嗨@JohanC,非常感谢它解决了我的大部分问题。还有一个技术问题。我尝试使用:ax.tricontour(df.a.values,df.b.values,df.c.values, levels = [c], color='white') ax.tricontourf(df.a.values,df.b.values,df.c.values, 100) 将一个轮廓与图像的其余部分重叠。虽然这可行,但它不想改变单个轮廓的颜色并抱怨UserWarning: The following kwargs were not used by contour: 'color'。知道如何防止这种情况发生吗?
  • 不知什么原因,在这个函数中命名参数的唯一方法是colors=。许多其他函数有color= 没有s 甚至c=
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 2011-07-05
  • 1970-01-01
相关资源
最近更新 更多