Algorithm 如何变换两组离散点(向量)以帮助在公共比例上绘制它们

Algorithm 如何变换两组离散点(向量)以帮助在公共比例上绘制它们,algorithm,math,matplotlib,Algorithm,Math,Matplotlib,我有两组离散点 G1:(x,y1),其中y1在整数范围[1..90](比如) G2:(x,y2),其中y2在整数范围[1..110]内 这些点集的长度不同,但我想在一个共同的尺度上比较它们的图 也就是说,我需要用一个通用的比例(比如[1..100])在单个图形中显示这些图形图 我想知道我怎样才能做到这一点。我必须如何变换这些向量,才能以通用比例绘制它 另外,我想具体说明这个问题 ,让我们考虑两个列表: len(d1)=110,他包含一些值。 len(d2)=80。 我想在一张图片中构建这些图形(

我有两组离散点

G1:(x,y1),其中y1在整数范围[1..90](比如)

G2:(x,y2),其中y2在整数范围[1..110]内

这些点集的长度不同,但我想在一个共同的尺度上比较它们的图

也就是说,我需要用一个通用的比例(比如[1..100])在单个图形中显示这些图形图

我想知道我怎样才能做到这一点。我必须如何变换这些向量,才能以通用比例绘制它

另外,我想具体说明这个问题

,让我们考虑两个列表: len(d1)=110,他包含一些值。 len(d2)=80。 我想在一张图片中构建这些图形(使用matplotlib)。 len(x)=110-范围仅为0到110

fig, ax = plt.subplots()
ax.plot(x, d1, 'k-')
ax.plot(x, d2, 'c--')
所以,若我只是将列表d2的元素乘以某个系数,我只能得到80个元素,它不能用于绘图图。此外,我还必须填充缺失的值,但我不知道如何进行填充。

我觉得您需要使用较少样本的向量来获得更多样本和 具有较高样本的向量以获得较少的样本(本质上与两个向量的采样率相匹配)

我曾经做过上/下采样

我试着用两个样本大小不等的随机向量来模拟你的情况

看看这是否对你有帮助:

import numpy as np
from scipy import signal  
# scipy.signal module contains a interpolator / decimator
import matplotlib.pyplot as plt

# Creating random vectors for a and b

vector_a = np.sin(2*3.14*100*np.arange(130))  
# Sine signal with 100Hz freq and 130 time samples

vector_b = np.cos(2*3.14*100*np.arange(80))
# Cosine signal with 100Hz freq and 80 time samples

# To avoid bias towards any one vector length take the
# mean of the two sample lengths as the common sample length

common_no_of_samples = (vector_a.shape[0] + vector_b.shape[0]) // 2 
# 105 Samples

# Upsample vector_a to have common_no_of_samples
vector_a = signal.resample(vector_a, common_no_of_samples)
# Downsample vector_b to have common_no_of_samples
vector_b = signal.resample(vector_b, common_no_of_samples)

fig, ax = plt.subplots()
ax.plot(np.arange(common_no_of_samples), vector_a, 'k-')
ax.plot(np.arange(common_no_of_samples), vector_b, 'c--')

# Where np.arange(common_no_of_samples) refers to the common time axis
# vector_a and vector_b are the resampled vectors.

如果您想成为中的点,可以执行以下操作:

time_axis = np.arange(common_no_of_samples)
vector_a = np.dstack((vector_a, time_axis))
这将生成表单的点:

array([[[  2.23656191e-02,   0.00000000e+00],
    [ -3.96584073e-01,   1.00000000e+00],
    [ -7.01262520e-01,   2.00000000e+00],
    [ -9.31867589e-01,   3.00000000e+00],
    [ -9.95165113e-01,   4.00000000e+00],
    [ -9.24625413e-01,   5.00000000e+00],
    [ -6.96587056e-01,   6.00000000e+00],
    [ -3.74795767e-01,   7.00000000e+00],
    [  1.59956385e-02,   8.00000000e+00],
    [  3.94192306e-01,   9.00000000e+00],
    [  7.20969109e-01,   1.00000000e+01],
    [  9.28803144e-01,   1.10000000e+01],
    [  1.00160878e+00,   1.20000000e+01],
    [  9.13659002e-01,   1.30000000e+01],
    [  6.91934367e-01,   1.40000000e+01],
    [  3.57910455e-01,   1.50000000e+01],

规模重要吗?为什么不把一个尺度转换成另一个尺度呢?一般情况下,物质只有一个尺度。我想在一张图片中创建图形。但我无法构建转换函数如果你只想将[a1,a2]范围内的数字a缩放到[b1,b2],那么B=b1+(a-a1)*(b2-b1)/(a2-a1)Lior,我刚刚为我的问题添加了具体的信息。好的。我对matplotlib一无所知,但您可能想比较以不同速率采样的两个时间序列(例如,每小时90个样本和每小时110个样本),以便能够进行比较。基本上,您需要插值和重新采样。如果只是为了可视化,可能有更简单的方法。。。