Algorithm 如何变换两组离散点(向量)以帮助在公共比例上绘制它们
我有两组离散点 G1:(x,y1),其中y1在整数范围[1..90](比如) G2:(x,y2),其中y2在整数范围[1..110]内 这些点集的长度不同,但我想在一个共同的尺度上比较它们的图 也就是说,我需要用一个通用的比例(比如[1..100])在单个图形中显示这些图形图 我想知道我怎样才能做到这一点。我必须如何变换这些向量,才能以通用比例绘制它 另外,我想具体说明这个问题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。 我想在一张图片中构建这些图形(
,让我们考虑两个列表: 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个样本),以便能够进行比较。基本上,您需要插值和重新采样。如果只是为了可视化,可能有更简单的方法。。。