如何在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我下载了你的数据+使用你的代码我得到了一个完全不同的图。你能再检查一下吗?真的吗?使用相同的代码?稍后我会再检查一遍。我现在和现在都在火车上