0

我是 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])
4

1 回答 1

0

这是一个回答您问题的代码片段:

t=linspace(0,1000, 1000)
y=sin(0.1*t)
ii=find(t>100)
plot(t[ii],y[ii])

基本上find你会生成一个满足逻辑条件(t>100)的索引列表,然后使用这个列表。

ps把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')
于 2013-11-12T00:08:36.440 回答