我是python的新手。我有一个有四列的数组。我想绘制第 2 列和第 3 列,等待第 1 列满足条件。如果第 1 列不满足此范围,则将其绘制在下一个子图中。我已经看到使用 where 函数可以做到这一点 - 只是不确定如何去做。
例如:
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
data = np.array([[17., 18., 19., 20., 31., 46.],
[1.52,2.5,2.55,2.56,2.53,2.54],
[7.04,7.06,9.05,11.08,7.06,11.06],
[0.,0.,0.,0.,4.,4.]])
第一轮并替换第二列:
dataRound = sp.round_(data,1)
data[:,1] = dataRound[:,1]
然后定位/绘制两个不同的条件:
if np.where(data[i]==1.5):
subplot(211)
plt.scatter(data[:,1],data[:,2])
elif np.where(data[i] ==2.5):
subplot(212)
plt.scatter(data[:,1], data[:,2])
下面是一个回答您问题的代码片段:
t=linspace(0,1000, 1000)
y=sin(0.1*t)
ii=find(t>100)
plot(t[ii],y[ii])
基本上,使用 find
生成满足逻辑条件 (t>100) 的索引列表,然后使用此列表。
附言 将NP和PLT放在需要的地方
更新:
这是你需要的吗?请注意,您必须交换 [1,:] 而不是 [:,1]。 建议 - 打印出您正在做的事情以确保。
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
data = np.array([[17., 18., 19., 20., 31., 46.],
[1.52,2.5,2.55,2.56,2.53,2.54],
[7.04,7.06,9.05,11.08,7.06,11.06],
[0.,0.,0.,0.,4.,4.]])
dataRound = sp.round_(data,1)
data[1,:] = dataRound[1,:]
ax1=plt.subplot(211)
ax2=subplot(212)
ax1.scatter(data[1,data[1,:]<=1.5], data[2,data[1,:]<=1.5], color = 'g')
ax2.scatter(data[1,data[1,:]>=2.5], data[2,data[1,:]>=2.5], color = 'b')
如果要绘制第 2 列和第 3 列,则:
ax1.scatter(data[2,data[1,:]<=1.5], data[3,data[1,:]<=1.5], color = 'g')
ax2.scatter(data[2,data[1,:]>=2.5], data[3,data[1,:]>=2.5], color = 'b')