从文本文件转换字符串以使用matplotlib进行绘图

时间:2016-08-11 20:33:53

标签: python-3.x matplotlib graph error-handling

我正在尝试使用文本文件中的日期和整数绘制图形,如下所示:

Screenshot of text file

但是我一直收到此错误

  

追踪(最近的呼叫最后):
        文件“C:\ Users \ Haeshan \ Desktop \ Comp Sci CC \ graph.py”,第21行,in           曲线图()
        文件“C:\ Users \ Haeshan \ Desktop \ Comp Sci CC \ graph.py”,第9行,图中           converters = {1:mdates.strpdate2num(“%d /%m /%Y”)})
        文件“C:\ Users \ Haeshan \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ numpy \ lib \ npyio.py”,第930行,在loadtxt中           items = [conv(val)for(conv,val)in zip(converter,vals)]         文件“C:\ Users \ Haeshan \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ numpy \ lib \ npyio.py”,第930行,中
          items = [conv(val)for(conv,val)in zip(converter,vals)]
        文件“C:\ Users \ Haeshan \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ numpy \ lib \ npyio.py”,第659行,在floatconv中           return float(x)
      ValueError:无法将字符串转换为float:b“['10'”

import matplotlib.pyplot as plt
import numpy as np
import csv
import matplotlib.dates as mdates

def graph():
    date, value = np.loadtxt("Scores.txt", delimiter = ",", unpack=True,
                             converters = {1: mdates.strpdate2num("%d/%m/%Y")})
    fig = plt.figure()
    ax1 = fig.add_subplot(1,1,1, axisbg ="white")
    plt.plot_date(x=date, y=value)
    plt.title("Performace")
    plt.ylabel("Score")
    plt.xlabel("Date")
graph()

任何想法, 非常感谢

1 个答案:

答案 0 :(得分:0)

问题是你的第一列有引号。既然您无论如何定义转换器,我会将其更改为

converters = {0: (lambda x: int(x)),1: mdates.strpdate2num("%d/%m/%Y")})

<强>更新

抱歉,由于引号我没有看到其他问题。 TBH,在这种情况下我不会使用np.loadtxt,因为每行中都有方括号。此外,您遇到的问题是您使用的是Python 3,其中字符串是unicode而不是字节,但loadtxt用于字节(因此行前面的b)。 我的建议是逐行阅读并解析每一行,例如

dates,values = list(),list()
formater = mdates.strpdate2num("%d/%m/%Y")
with open("Scores.txt",'r',newline='\n') as input_file:
    for line in input_file:
        # Remove the square brackets, quotation marks and newlines (if necessary)
        # Be aware that this will also kill all square brackets and quotations marks in your line
        entries = line.replace('[','').replace(']','').replace("'",'').replace('\n','').split(',')
        values.append(int(entries[0]))
        dates.append(formater(entries[1]))