56842


Pythonで書かれたリストの値を引数で取得し、プロットするプログラムを実行しようとしています。

[code]

    $ python pythonplot.py input.txt
    
[/code]

と実行したところエラーが出てしまいました。

[code]

    Traceback (most recent call last):
      File "pythonplot.py", line 9, in <module>
        a = np.loadtxt(sys.argv[1])
      File "/Users/username/anaconda/lib/python3.6/site-packages/numpy/lib/npyio.py", line 1101, in loadtxt
        for x in read_data(_loadtxt_chunksize):
      File "/Users/username/anaconda/lib/python3.6/site-packages/numpy/lib/npyio.py", line 1028, in read_data
        items = [conv(val) for (conv, val) in zip(converters, vals)]
      File "/Users/username/anaconda/lib/python3.6/site-packages/numpy/lib/npyio.py", line 1028, in <listcomp>
        items = [conv(val) for (conv, val) in zip(converters, vals)]
      File "/Users/username/anaconda/lib/python3.6/site-packages/numpy/lib/npyio.py", line 746, in floatconv
        return float(x)
    ValueError: could not convert string to float: '2.0,'
    
[/code]

プロットするプログラムを変えずに入力を変更して、プロットを実行したいのですが、この場合、どのような入力が適しているのでしょうか。

具体例などを教えていただきたいです。

**入力ファイル(input.txt)**

[code]

    2.0, 8.11, 4.76, 9.65, 6.43
    
[/code]

**プロットするプログラム(.python)**

[code]

    import sys
    import numpy as np
    import matplotlib.pyplot as plt
    
    if len(sys.argv) != 2:
        print ("usage:", sys.argv[0], "<filename>")
        exit()
    
    a = np.loadtxt(sys.argv[1])
    
    print(a)
    
    list1, list2 = zip(*a)
    plt.plot(list1, list2)
    plt.show()
    
[/code]

**試したこと**  
**入力ファイル(input.txt)**

[code]

    2.00034
    
[/code]

としたところ、以下のエラーになりましたが、こちらも修正方法がわからない状態です

[code]

    $ python pythonplot.py input.txt
    2.00034
    Traceback (most recent call last):
      File "pythonplot.py", line 13, in <module>
        list1, list2 = zip(*a)
    TypeError: iteration over a 0-d array
    
[/code]


CC BY-SA 4.0
2019-07-23T09:14:57.043
56841
2019-07-23T09:43:15.773
question
python python3
Pythonで書かれたリストの値を引数でとってプロットするプログラムのエラー


エラーの原因は２つ

  1. １つ目は、データが ',' で区切られているにも関わらず、delimiter の指定がないこと  
(デフォルトでは whitespace にて分割されます)

  2. ２つ目は、データが１次元(1x5)データにも関わらず、xとyのデータに分割しようとしていること

となります。

１つ目に関しては `np.loadtxt()` の引数に `delimiter=','` を追加してください。  
２つ目に関してはデータの形式を

[code]

    x0, y0
    x1, y1
    x2, y2
    x3, y3
    x4, y4
    
[/code]

の形式のデータを入力するようにしてみてください


CC BY-SA 4.0
2019-07-23T09:43:15.773
56842
2019-07-23T09:43:15.773
24801
56841
answer