如何在Python中修改绘图的值
我正在处理时间序列数据(共享)如何在Python中修改绘图的值,python,python-3.x,numpy,matplotlib,Python,Python 3.x,Numpy,Matplotlib,我正在处理时间序列数据(共享) 要向数据中添加中间点,需要使用某种形式的插值。在numpy中有np.interp,它为执行线性插值提供了一个简单的接口 下面是一个简单的例子 import numpy as np import matplotlib.pyplot as plt x = np.array([1,2,3,10,20,30]) y = np.array([1,2,3,4,5,6]) fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.
要向数据中添加中间点,需要使用某种形式的插值。在
numpy
中有np.interp
,它为执行线性插值提供了一个简单的接口
下面是一个简单的例子
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1,2,3,10,20,30])
y = np.array([1,2,3,4,5,6])
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(x, y, '.', ms=10)
# Create a continuous range for the x axis from first to last value
xc = np.arange(x[0], x[-1])
yi = np.interp(xc, x, y)
ax.plot(xc, yi, 'x', color='r')
这将生成以下绘图
输入数据显示为蓝色圆圈,插值为红色十字
需要注意的关键是,要插值数据,首先需要计算插值数据的X轴(例如,从最小值到最大值的规则范围)。然后将此新轴连同当前x
和当前y
值一起传递到np.interp
。结果是插值的x
位置处的一组新的y
值
使用示例数据/脚本,您可以-
import numpy as np
import matplotlib.pyplot as plt
protocols = {}
types = {"data1": "data1_final.csv"}
for protname, fname in types.items():
col_time,col_window = np.loadtxt(fname,delimiter=',').T
trailing_window = col_window[:-1]
leading_window = col_window[1:]
decreasing_inds = np.where(leading_window < trailing_window)[0]
quotient = leading_window[decreasing_inds]/trailing_window[decreasing_inds]
quotient_times = col_time[decreasing_inds]
protocols[protname] = {
"col_time": col_time,
"col_window": col_window,
"quotient_times": quotient_times,
"quotient": quotient,
}
plt.figure(); plt.clf()
plt.plot(quotient_times,quotient, ".", label=protname, color="blue")
# Interpolate, along an axis from min..max quotient_times
xc = np.arange(quotient_times[0], quotient_times[-1], 0.5)
quotienti = np.interp(xc, quotient_times, quotient)
plt.plot(xc, quotienti, 'x', color='r')
plt.ylim(0, 1.0001)
plt.title(protname)
plt.xlabel("time")
plt.ylabel("quotient")
plt.legend()
plt.show()
将numpy导入为np
将matplotlib.pyplot作为plt导入
协议={}
类型={“data1”:“data1_final.csv”}
对于protname,fname在types.items()中:
col_time,col_window=np.loadtxt(fname,delimiter=',').T
尾随窗口=列窗口[:-1]
前导窗口=列窗口[1:]
递减索引=np.where(前导窗口<尾随窗口)[0]
商=前导窗口[减少索引]/尾随窗口[减少索引]
商乘=列乘时间[递减]
协议[protname]={
“col_time”:col_time,
“col_window”:col_window,
“商_次”:商_次,
“商”:商,
}
plt.figure();plt.clf()
plt.plot(商×次,商,“.”,label=protname,color=“blue”)
#沿轴从最小..最大商_次插值
xc=np.arange(商乘以[0],商乘以[-1],0.5)
商i=np.interp(xc,商乘以,商)
plt.绘图(xc,商i,'x',color='r')
plt.ylim(0,1.0001)
产品名称(产品名称)
plt.xlabel(“时间”)
plt.ylabel(“商”)
plt.legend()
plt.show()
这将生成以下绘图
要向数据中添加中间点,需要使用某种形式的插值。在
numpy
中有np.interp
,它为执行线性插值提供了一个简单的接口
下面是一个简单的例子
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1,2,3,10,20,30])
y = np.array([1,2,3,4,5,6])
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(x, y, '.', ms=10)
# Create a continuous range for the x axis from first to last value
xc = np.arange(x[0], x[-1])
yi = np.interp(xc, x, y)
ax.plot(xc, yi, 'x', color='r')
这将生成以下绘图
输入数据显示为蓝色圆圈,插值为红色十字
需要注意的关键是,要插值数据,首先需要计算插值数据的X轴(例如,从最小值到最大值的规则范围)。然后将此新轴连同当前x
和当前y
值一起传递到np.interp
。结果是插值的x
位置处的一组新的y
值
使用示例数据/脚本,您可以-
import numpy as np
import matplotlib.pyplot as plt
protocols = {}
types = {"data1": "data1_final.csv"}
for protname, fname in types.items():
col_time,col_window = np.loadtxt(fname,delimiter=',').T
trailing_window = col_window[:-1]
leading_window = col_window[1:]
decreasing_inds = np.where(leading_window < trailing_window)[0]
quotient = leading_window[decreasing_inds]/trailing_window[decreasing_inds]
quotient_times = col_time[decreasing_inds]
protocols[protname] = {
"col_time": col_time,
"col_window": col_window,
"quotient_times": quotient_times,
"quotient": quotient,
}
plt.figure(); plt.clf()
plt.plot(quotient_times,quotient, ".", label=protname, color="blue")
# Interpolate, along an axis from min..max quotient_times
xc = np.arange(quotient_times[0], quotient_times[-1], 0.5)
quotienti = np.interp(xc, quotient_times, quotient)
plt.plot(xc, quotienti, 'x', color='r')
plt.ylim(0, 1.0001)
plt.title(protname)
plt.xlabel("time")
plt.ylabel("quotient")
plt.legend()
plt.show()
将numpy导入为np
将matplotlib.pyplot作为plt导入
协议={}
类型={“data1”:“data1_final.csv”}
对于protname,fname在types.items()中:
col_time,col_window=np.loadtxt(fname,delimiter=',').T
尾随窗口=列窗口[:-1]
前导窗口=列窗口[1:]
递减索引=np.where(前导窗口<尾随窗口)[0]
商=前导窗口[减少索引]/尾随窗口[减少索引]
商乘=列乘时间[递减]
协议[protname]={
“col_time”:col_time,
“col_window”:col_window,
“商_次”:商_次,
“商”:商,
}
plt.figure();plt.clf()
plt.plot(商×次,商,“.”,label=protname,color=“blue”)
#沿轴从最小..最大商_次插值
xc=np.arange(商乘以[0],商乘以[-1],0.5)
商i=np.interp(xc,商乘以,商)
plt.绘图(xc,商i,'x',color='r')
plt.ylim(0,1.0001)
产品名称(产品名称)
plt.xlabel(“时间”)
plt.ylabel(“商”)
plt.legend()
plt.show()
这将生成以下绘图
您可以多次调用
plt.plot
在同一个绘图上再次绘图(添加更多值)。我已经尝试过了,但它一直在同一点上绘图。如果您看到的是x轴,我希望其他点位于不同的t
上,而不是位于一个。如果您绘制相同的数据,它将最终位于相同的位置。你每次都在绘制不同的数据吗?不,我在绘制相同的数据。在你的问题中提到这一点很有用。你需要解释你想要完成什么“在图形上有更多点”不足以提供答案。你可以多次调用plt.plot
在同一个绘图上再次绘图(添加更多值)。我已经尝试过了,但它一直在同一点上绘图。如果您看到的是x轴,我希望其他点位于不同的t
上,而不是位于一个。如果您绘制相同的数据,它将最终位于相同的位置。你每次都在绘制不同的数据吗?不,我在绘制相同的数据。在你的问题中提到这一点很有用。你需要解释你想要完成什么“在图表上有更多的点”不足以提供答案。@布朗我下载了你的数据+使用你的代码我得到了一个完全不同的图。你能再检查一下吗?真的吗?使用相同的代码?稍后我会再检查一遍。我现在在火车上,谢谢你们,如果你们在我再次检查之前不投反对票,我将不胜感激。@Brown是的,同样的代码。没问题,我稍后再查!你是对的,我分享了一个错误的数据,对此我很抱歉。我现在已经用正确的数据更新了,非常感谢。@Brown现在看:)@Brown我下载了你的数据+使用你的代码我得到了一个完全不同的图。你能再检查一下吗?真的吗?使用相同的代码?稍后我会再检查一遍。我现在和现在都在火车上