python读取txt文件并画图[通俗易懂]

1,使用python读取txt文件已知txt文件内容如下:001124394165256361234567请以第一列为x轴,第二列为y轴画图 步骤如下: 1)使用readlines读取文件 2)建立两个空列表X,Y,将第一列的数字放入X,第二列的数字放入Y中 3)以X,Y为轴画图 实现如下…

大家好,又见面了,我是你们的朋友全栈君。

1,使用python读取txt文件

已知txt文件内容如下:

    0   0
    1   1
    2   4
    3   9
    4   16
    5   25
    6   36
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

请以第一列为x轴,第二列为y轴画图 
步骤如下: 
1)使用readlines读取文件 
2)建立两个空列表X,Y,将第一列的数字放入X,第二列的数字放入Y中 
3)以X,Y为轴画图 
实现如下:

import matplotlib.pyplot as plt
filename = 'test1.txt'
X,Y = [],[]
with open(filename, 'r') as f:#1
    lines = f.readlines()#2
    for line in lines:#3
        value = [float(s) for s in line.split()]#4
        X.append(value[0])#5
        Y.append(value[1])

print(X)
print(Y)

plt.plot(X, Y)
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

步骤讲解: 
1,以只读形式打开文件 
2,读取每行文件,lines的结果是:

['\t0\t0\n', '\t1\t1\n', '\t2\t4\n', '\t3\t9\n', '\t4\t16\n', '\t5\t25\n', '\t6\t36']
  • 1

即已将文件放到一个list中,其中\t是前面的tab空格,\n是换行。现在要将这些\t,\n去掉,使用split函数。 
但需要注意split()不可以用在list中,因为list没有split()函数,只有str才有,也就是说lines.split()会报错;但lines[i].split() for i in lines不会,因为lines[0]到lines[6]等每个元素都是列表中的一个str类型,所以每个元素可以用split()函数,如下:

>>> type(lines[0])
<class 'str'>
>>> type(lines)
<class 'list'>
>>> lines[0].split()
['0', '0']
>>> lines.split()
Traceback (most recent call last):
  File "<pyshell#82>", line 1, in <module>
    lines.split()
AttributeError: 'list' object has no attribute 'split'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

float将str里面的字符改为数字 
5因为是for循环,所以每次只有两个数字,即一行中的两个,于是总是将第一个放在X中,第二个放在Y中,最后输出X,Y如下:

[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
[0.0, 1.0, 4.0, 9.0, 16.0, 25.0, 36.0]
  • 1
  • 2

可见这正是我们要的结果,同时画图如下: 
这里写图片描述

2)优化代码

上面的代码有些繁琐(但却是很中规中矩的),可以采用方法以下优化 
代码如下:

X, Y = [], []
for line in open('my_data.txt', 'r'):
    values = [float(s) for s in line.split()]
    X.append(values[0])
    Y.append(values[1])
plt.plot(X, Y)
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

还可以进一步优化(列表解析法list conprehension)

import matplotlib.pyplot as plt

with open('test1.txt', 'r') as f:
    X, Y = zip(*[[float(s) for s in line.split()] for line in f])
plt.plot(X, Y)
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这种方法的好处是,如果有很多列,可以直接在赋值号左边加值,如X,Y,Z,W =….

解释:以上调用了zip函数,zip函数的用法可以参考博文frydsh

3,使用numpy

代码如下:

import matplotlib.pyplot as plt
import numpy as np

data = np.loadtxt('test1.txt')

plt.plot(data[:,0],data[:,1])
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果和上面的图一样 
综上,使用numpy是最方便的;当然刚开始的程序有点儿复杂,但对于理解python画图的实现过程是有帮助的。 
另外,numpy.loadtxt还可以读取.dat等文件,如读取CMB上的功率谱

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126338.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 详解数据仓库和数据库的区别「建议收藏」

    详解数据仓库和数据库的区别「建议收藏」一、数据仓库什么是数据仓库?数据仓库(DataWarehouse),可简写为DW或DWH,数据仓库,是为了企业所有级别的决策制定计划过程,提供所有类型数据类型的战略集合。它出于分析性报告和决策支持的目的而创建。为需要业务智能的企业,为需要指导业务流程改进、监视时间,成本,质量以及控制等;数据仓库能干什么?(举几个栗子)年度销售目标的制定,需要根据以往的历史报表进行决策,不能随便…

    2025年8月25日
    3
  • 陕西勉县旅游策划方案——打造三国之都!

    陕西勉县旅游策划方案——打造三国之都!陕西勉县旅游策划方案————打造三国之都熊大寻旅游策划公司/文陕西勉县——三国文化的集散地,以其包容与大气,为三国文化的爱好者铺排了强健的精神底色,给予了所有三国迷体验历史的自信和豪情。2009年8月,受陕西勉县县政府的邀请,熊大寻旅游策划公司和旅游规划公司来到勉县,为其城市旅游进行整体策划。熊大寻旅游策划公司和旅游规划公司在考察走访完勉县所有旅游景点,并消话完项目资料后,对勉县做出了系统…

    2022年6月6日
    142
  • easymock单元测试(控制测试)

    本文转自:点击打开链接测试驱动开发是软件开发的重要部分。如果代码不进行测试,就是不可靠的。所有代码都必须测试,而且理想情况下应该在编写代码之前编写测试。但是,有些东西容易测试,有些东西不容易。如果要编写一个代表货币值的简单的类,那么很容易测试把$1.23和$2.8相加是否能够得出$4.03,而不是$3.03或$4.029999998。测试是否不会出现$

    2022年4月12日
    54
  • nested_initialization error sql*net

    nested_initialization error sql*net1.报错:###Cause:java.sql.SQLSyntaxErrorException:ORA-00911:无效字符;badSQLgrammar[];nestedexceptionisjava.sql.SQLSyntaxErrorException:ORA-00911:无效字符2.出错原因:1)sql在数据库执行都是OK的。真…

    2022年8月20日
    8
  • Channel9中关于Windows内核的采访录像

    Channel9中关于Windows内核的采访录像转载自http://advdbg.com/blogs/advdbg_system/articles/21.aspx今年一月份起,Channel9陆续访谈了一些微软内部的高级设计师和架构师,每次探讨Windows内核的一个方面。尽管录像和采访水准比.NetShow差很多,但是正因为采访的场合就在办公室,气氛也很随意,又很有针对性,因此谈的内容还是很值得一看的。建议大家茶余饭后边听边消遣一下。

    2022年7月13日
    19
  • leetcode 通配符匹配_匹配任意一个字符的通配符是

    leetcode 通配符匹配_匹配任意一个字符的通配符是给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa”p = “*

    2022年8月9日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号