Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何索引列表/numpy数组以使用matplotlib打印数据_Python_Numpy_Matplotlib - Fatal编程技术网

Python 如何索引列表/numpy数组以使用matplotlib打印数据

Python 如何索引列表/numpy数组以使用matplotlib打印数据,python,numpy,matplotlib,Python,Numpy,Matplotlib,我有一个函数f(x,t)=cos(t)*t+x,我想在离散时间步长ti和离散宽度步长xj上显示结果在宽度x和时间t上的变化 现在我在SX上呆了一段时间,感到非常尴尬,因为我只能发布这么小的代码,或者说什么都没有(因为我没有做过任何工作……): 不过如果有人有时间帮忙,我会很感激的 from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as pyplot from astropy.io

我有一个函数
f(x,t)=cos(t)*t+x
,我想在离散时间步长
ti
和离散宽度步长
xj
上显示结果在宽度
x
和时间
t
上的变化

现在我在SX上呆了一段时间,感到非常尴尬,因为我只能发布这么小的代码,或者说什么都没有(因为我没有做过任何工作……): 不过如果有人有时间帮忙,我会很感激的

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as pyplot
from astropy.io.ascii.latex import AASTex

def func(xi, ti):
    res = np.cos(ti)*ti + xi
    return res

timeSpacing = 100
timeStart = 0
timeEnd = 1
time = np.linspace(timeStart, timeEnd, timeSpacing)

widthSpacing = 300
widthStart = 0
widthEnd = 3
width = np.linspace(widthStart, widthEnd, widthSpacing)

resultList = [None]*timeSpacing
resultListInner = [None]*widthSpacing

for i, ithTime in enumerate(time):
    for j, jthWidth in enumerate(width):
        aas = np.zeros_like(width)
        aas.fill(ithTime)
        resultListInner[j] = ithTime, jthWidth, func(jthWidth, aas)
    resultList[i] = resultListInner
那么,如何使用matplotlib正确索引列表和数组并打印数据呢


我的情节应该是这样的:

在我的例子中,孔径应该是宽度
x
,天空环是我的时间
t
,RMS是我的
func(x,t)
两点:

  • Numpy提供了一个非常好的函数来处理数组元素的差异:

  • Matplotlib用于创建所需的绘图(也使用Numpy)

现在,把这些结合到你可能想要的东西中,看起来像这样

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

def func(xi, ti):
    res = np.cos(ti)*np.sin(xi)
    return res

timeSpacing = 20
timeStart = 0
timeEnd = 1
time = np.linspace(timeStart, timeEnd, timeSpacing)

widthSpacing = 50
widthStart = 0
widthEnd = 3
width = np.linspace(widthStart, widthEnd, widthSpacing)


X,T = np.meshgrid(width,time)
F = func(X,T)

DF = np.diff(np.diff(F,axis=0),axis=1)

fig = plt.figure()
ax  = fig.add_subplot(111,projection='3d')

ax.plot_wireframe(X[:-1,:-1],T[:-1,:-1],DF)

plt.show()
请注意,
diff
应用两次:在每个维度
轴=
中应用一次。我还将您提供的玩具功能更改为在本例中看起来相当不错的功能


对于更一般的用途,您似乎只想将所有
F
数据收集到一个2D数组中,然后从
DF=
行开始操作。

我已经读了几遍,不知道您想做什么。这里是我看到的:一个y与t的曲线图y=cos(t)*t将是一个楔形包络内的振荡,用y=cos(t)*t+x添加
x
只会添加一个偏移量。偏移量是如此明显,以至于我不明白为什么要绘制300个这样的图:它会因为很少的信息而造成大量的混乱。你为什么把
x
称为“宽度”?或者,也许更简单,你能展示一个你想要的情节的草图吗?是的,这个功能对于showcase来说很简单。真正的函数是(我想我可以说不止)复杂的,大约有4000行代码,但最终只有(稍微简化的说)宽度(
x
)和时间(
t
)的依赖关系。我将添加一个示例图片,我希望我的绘图是什么样的。您从这段代码中得到了什么?什么都没有-我总是,无论如何,索引列表/数组错误,并得到不同的错误。这看起来是一个不错的方法,但您为什么要使用
diff
;也就是说,问题中什么看起来像差异?“显示宽度x和时间t上结果的变化”——因此将“结果”解释为F,计算每个步骤之间x和t的变化正是
diff
所要做的。是的,这几乎就是我想要的。但正如tom10建议的那样,我不想绘制变化/差异,而是绘制绝对位置;)我可能表达得不太好。尽管如此,谢谢