You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于列1数值范围筛选数据并绘制列2、3或列2直方图

数据筛选与绘图实现方案

问题说明

处理一个3列20000行的文本数据文件,需完成:

  • 绘制列2与列3的散点图,或列2的直方图
  • 仅保留列1数值在100-250范围内的数据

数据样本:

174.2227   0.1624629285511385E+03  -0.6292327918805374E+02
96.5364   0.9382981565234142E+02  -0.2269888520085278E+02
170.4995   0.1255471456652923E+03  -0.1153603193263530E+03
70.3605   0.5622579821326531E+02  -0.4229968593987883E+02
70.3641   0.1705414793985607E+02  -0.6826609764576108E+02
245.6546   0.1009630870343540E+03  -0.2239478772161106E+03
247.0803   0.2428952541481390E+03  -0.4528334882548071E+02
240.4885   0.1898105937624483E+03  -0.1476708453344265E+03
190.4206   0.2201049326187159E+01  -0.1904078537576801E+03
58.0858   0.2315296872737939E+02  -0.5327192955482575E+02
263.4021   0.2480699465562589E+03  -0.8855483744759709E+02
52.9697   0.1776581942067039E+02  -0.4990154780891378E+02
135.9583   0.1774572342000289E+02  -0.1347952056648868E+03
79.8317   0.5762263417747670E+02  -0.5525152449053701E+02
155.5004   0.1506111928119825E+03  -0.3868642911295389E+02

原尝试代码:

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np


file1 = "data1.txt"

a1 = np.loadtxt(file1,usecols=[0])
b1 = np.loadtxt(file1,usecols=[1])
c1 = np.loadtxt(file1,usecols=[2])

while 100 < a1 < 200:

   plt.plot(b1,c1,'k.')

plt.show()

问题分析

  1. 多次调用np.loadtxt加载同一文件,IO效率低下,尤其针对20000行数据
  2. while循环逻辑错误:数组无法直接用100 < a1 < 200做比较,会返回布尔数组而非单个布尔值,导致循环无法正常执行
  3. 未正确筛选数据,直接绘制全部数据不符合需求

正确实现代码

1. 加载并筛选数据

import matplotlib.pyplot as plt
import numpy as np

file1 = "data1.txt"
# 一次加载所有3列数据
data = np.loadtxt(file1)
# 拆分各列
col1, col2, col3 = data[:, 0], data[:, 1], data[:, 2]
# 生成筛选掩码:保留col1在100到250之间的数据
mask = (col1 >= 100) & (col1 <= 250)
# 应用掩码筛选数据
filtered_col2 = col2[mask]
filtered_col3 = col3[mask]

2. 绘制列2与列3的散点图

plt.figure(figsize=(8, 6))
plt.scatter(filtered_col2, filtered_col3, c='k', marker='.', label='筛选后数据')
plt.xlabel('列2数值')
plt.ylabel('列3数值')
plt.title('列2 vs 列3(列1∈[100,250])')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

3. 绘制列2的直方图

plt.figure(figsize=(8, 6))
plt.hist(filtered_col2, bins=20, edgecolor='black', alpha=0.7)
plt.xlabel('列2数值')
plt.ylabel('频数')
plt.title('列2直方图(列1∈[100,250])')
plt.grid(True, alpha=0.3)
plt.show()

内容的提问来源于stack exchange,提问作者jord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:25:23