当前位置: 首页 > 面试题库 >

Python-Matplotlib:查找线图的交集

狄兴业
2023-03-14
问题内容

我有一个可能很简单的问题,这使我已经安静了一段时间。有没有一种简单的方法来返回python matplotlib中两个绘制的(非分析性)数据集的交集?

为了详细说明,我有这样的东西:

x=[1.4,2.1,3,5.9,8,9,23]
y=[2.3,3.1,1,3.9,8,9,11]
x1=[1,2,3,4,6,8,9]
y1=[4,12,7,1,6.3,8.5,12]
plot(x1,y1,'k-',x,y,'b-')

本示例中的数据完全是任意的。现在,我想知道是否有一个简单的内置函数会丢失,该函数会向我返回两个图之间的精确交点。

希望我能说清楚自己,也希望我没有错过任何显而易见的事情。


问题答案:

我们可以scipy.interpolate.PiecewisePolynomial用来创建由分段线性数据定义的函数。

p1=interpolate.PiecewisePolynomial(x1,y1[:,np.newaxis])
p2=interpolate.PiecewisePolynomial(x2,y2[:,np.newaxis])

然后,我们可以利用这两个功能的区别,

def pdiff(x):
    return p1(x)-p2(x)

并使用optimize.fsolve查找以下内容的根pdiff

import scipy.interpolate as interpolate
import scipy.optimize as optimize
import numpy as np

x1=np.array([1.4,2.1,3,5.9,8,9,23])
y1=np.array([2.3,3.1,1,3.9,8,9,11])
x2=np.array([1,2,3,4,6,8,9])
y2=np.array([4,12,7,1,6.3,8.5,12])

p1=interpolate.PiecewisePolynomial(x1,y1[:,np.newaxis])
p2=interpolate.PiecewisePolynomial(x2,y2[:,np.newaxis])

def pdiff(x):
    return p1(x)-p2(x)

xs=np.r_[x1,x2]
xs.sort()
x_min=xs.min()
x_max=xs.max()
x_mid=xs[:-1]+np.diff(xs)/2
roots=set()
for val in x_mid:
    root,infodict,ier,mesg = optimize.fsolve(pdiff,val,full_output=True)
    # ier==1 indicates a root has been found
    if ier==1 and x_min<root<x_max:
        roots.add(root[0])
roots=list(roots)        
print(np.column_stack((roots,p1(roots),p2(roots))))

产量

[[ 3.85714286  1.85714286  1.85714286]
 [ 4.60606061  2.60606061  2.60606061]]

第一列是x值,第二列是在处评估的第一个PiecewisePolynomial的y值,x第三列是第二个PiecewisePolynomial的y值。



 类似资料:
  • 主要内容:绘制单条折线,绘制多条折线图折线图(line chart)是我们日常工作、学习中经常使用的一种图表,它可以直观的反映数据的变化趋势。与绘制柱状图、饼状图等图形不同,Matplotlib 并没有直接提供绘制折线图的函数,因此本节着重讲解如何绘制一幅折线图。 绘制单条折线 下面示例是关于 小牛知识库用户活跃度的折线图: 显示结果如下: 绘制多条折线图 当学习完如何绘制单条折线的绘制后,再绘制多条折线也变的容易,只要准备好绘制多条

  • 本文向大家介绍查找图形的线号,包括了查找图形的线号的使用技巧和注意事项,需要的朋友参考一下 问题陈述 下图的线覆盖数字是多少? 解 顶点数= | V | = n = 7 线覆盖数=(α 1)≥⌈ ñ / 2 ⌉= 3    α 1 ≥3 通过使用3条边,我们可以覆盖所有顶点。 因此,行覆盖号为3。

  • 问题内容: 我有两个列表,日期和值。我想使用matplotlib绘制它们。以下创建了我的数据的散点图。 创建一个折线图。 但是我真正想要的是一个散点图,其中的点由一条线连接。 类似于R: ,这使我得到了点的散点图,并用连接点的线覆盖了点。 我该如何在python中做到这一点? 问题答案: 我认为@Evert有正确的答案: 几乎与 或您喜欢的任何 线型 。

  • 如何在IPython笔记本内的Matplotlib中将图例添加到xy线图中?我目前的尝试: 这样做,我得到以下错误: /Users/mc/.virtualenvs/kaggle/lib/python2.7/site-packages/matplotlib/legend.py:613:用户警告:图例不支持[]使用代理艺术家代替。 http://matplotlib.sourceforge.net/u

  • 等高线图(也称“水平图”)是一种在二维平面上显示 3D 图像的方法。等高线有时也被称为 “Z 切片”,如果您想要查看因变量 Z 与自变量 X、Y 之间的函数图像变化(即 Z=f(X,Y)),那么采用等高线图最为直观。 自变量 X 和 Y 需要被限制在矩形网格内,您可以将 x 、y 数组作为参数传递给 numpy.meshgrid() 函数来构建一个网格点矩阵。 关于 meshgrid() 函数用法

  • 问题内容: 我在找(但不是画画!)某些数据的等高线: 我知道’cn’包含了我想要的轮廓线,但我似乎无法到达 他们。我试过几种方法: 无济于事。我知道“cn”是一个“轮廓集”,而且是一个数组 我认为“LineCollection”是一个line数组 片段,但我不知道如何提取这些片段。 我的最终目标是创建一个在世界地图上绘制数据的KML文件,并且 这些数据的等高线。 然而,由于我的一些数据点离得很近,