导入txt文件matplotlib后显示图形

时间:2013-07-19 14:08:02

标签: python import matplotlib

我正在编写一个简单的程序,在导入文本文件后输出基本图形。我收到以下错误:

Traceback (most recent call last):
  File "C:\Users\Chris1\Desktop\attempt2\ex1.py", line 13, in <module>
    x.append(int(xAndY[0]))
ValueError: invalid literal for int() with base 10: '270.286'

我的python代码如下所示:

    import matplotlib.pyplot as plt

x = []
y = []

readFile = open ('temp.txt', 'r')

sepFile = readFile.read().split('\n')
readFile.close()

for plotPair in sepFile:
    xAndY = plotPair.split(',')
    x.append(int(xAndY[0]))
    y.append(int(xAndY[1]))

print x
print y



plt.plot(x, y)

plt.title('example 1')
plt.xlabel('D')
plt.ylabel('Frequency')

plt.show()    

我的文本文件片段如下所示:

270.286,4.353,16968.982,1903.115
38.934,68.608,16909.727,1930.394    
190.989,1.148,16785.367,1969.925         

问题似乎很小但似乎无法自己解决 感谢

2 个答案:

答案 0 :(得分:0)

这很简单,只需将int转换替换为float

for plotPair in sepFile:
    xAndY = plotPair.split(',')
    x.append(float(xAndY[0]))
    y.append(float(xAndY[1]))

这将解决错误。

答案 1 :(得分:0)

解决方案

如果要将浮点值转换为整数,只需更改

即可
x.append(int(xAndY[0]))
y.append(int(xAndY[1]))

x.append(int(float(xAndY[0])))
y.append(int(float(xAndY[1])))

enter image description here

您收到错误的原因

您收到错误,因为内置函数int不接受float的字符串表示作为其参数。来自documentation

  

<强> INT x = 0的
   int x,base = 10
  ...
  如果 x 不是数字或者给定了base,则 x 必须是表示基数为整数的字符串或Unicode对象。可选地,文字可以在前面加+或 - (之间没有空格)并且用空格包围。 base-n文字由数字0到n-1组成,a到z(或A到Z)的值为10到35。

在您的情况下( x 不是数字,而是浮点数的字符串表示),这意味着该函数不知道如何转换该值。这是因为对于base=10,参数只能包含数字[0-9],即不是.(点),这意味着字符串不能表示浮点数。


更好的解决方案

我建议您查看numpy.loadtxt,因为这样更容易使用:

x, y = np.loadtxt('temp.txt',     # Load values from the file 'temp.txt'
                  dtype=int,      # Convert values to integers
                  delimiter=',',  # Comma separated values
                  unpack=True,    # Unpack to several variables
                  usecols=(0,1))  # Use only columns 0 and 1

生成与修正后代码中相同的xy列表。

通过此修改,您的代码可以缩减为

import matplotlib.pyplot as plt
import numpy as np

x, y = np.loadtxt('temp.txt', dtype=int, delimiter=',',
                  unpack=True, usecols=(0,1))

plt.plot(x, y)

plt.title('example 1')
plt.xlabel('D')
plt.ylabel('Frequency')

plt.show()