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建议的那样,我不想绘制变化/差异,而是绘制绝对位置;)我可能表达得不太好。尽管如此,谢谢