在 Matplotlib Python 中的另一列中绘制满足条件的一系列数据



我是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')

最新更新