本来質問は1つずつするべきなのは承知しておりますが,元が同じコードで関連しており2個分解決を待って順次質問する時間がないのでまとめさせていただきます.
質問1つ目(could not convert string to float:)
シミュレーションの結果確認のためにPythonのヒートマップを使いたいのですが,csvが通ってくれません.
また一部のデータについてexcelの方で保存方法などをいじってたらなぜか通るようになったのですが,何がよかったのかさっぱり分かりません.元々のシミュレーションで使っているc++のコードから出力されてくるcsvがそのまま通る仕様にしたいので,「手動で毎回excelを開いて設定をいじる」といった方法ではなく根本的な解決法を教えてほしいです.
またこのエラー文について調べたところ,「数字の前後に"があるために失敗している」などといった記述が見られましたがテキストで開いてみてもそのようなこともないような気がして,結局原因や対処法が分かりません.
因みに下のプログラムを通過したcsvの例はt=0vxvy.csv,下記のエラーを出されるcsvの例はt=10vxvy.csvです.
該当のソースコード
Python
1import math 2import numpy as np 3import matplotlib.pyplot as plt 4 5p2=np.loadtxt('t=10vxvy.csv',delimiter=',') 6 7 8yy,zz=[],[] 9y=p2[0,:] 10z=p2[:,0] 11y=y[1:] 12z=z[1:] 13 14for num in range(len(y)): 15 yy.append(y) 16for num in range(len(z)): 17 zz.append(z) 18Y=np.array(yy) 19Z=np.array(zz).T 20 21p2=np.delete(p2,0,1) 22p2=np.delete(p2,1,0) 23 24plt.contourf(Y,Z,p2,5) 25plt.xlabel('vx') 26plt.ylabel('vy') 27plt.colorbar() 28plt.show()
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-34-3624bbc7010d> in <module> 3 import matplotlib.pyplot as plt 4 ----> 5 p2=np.loadtxt("t=10vxvy.csv",delimiter=',') 6 7 ~\Anaconda3\lib\site-packages\numpy\lib\npyio.py in loadtxt(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin, encoding, max_rows) 1137 # converting the data 1138 X = None -> 1139 for x in read_data(_loadtxt_chunksize): 1140 if X is None: 1141 X = np.array(x, dtype) ~\Anaconda3\lib\site-packages\numpy\lib\npyio.py in read_data(chunk_size) 1065 1066 # Convert each value according to its column and store -> 1067 items = [conv(val) for (conv, val) in zip(converters, vals)] 1068 1069 # Then pack it according to the dtype's nesting ~\Anaconda3\lib\site-packages\numpy\lib\npyio.py in <listcomp>(.0) 1065 1066 # Convert each value according to its column and store -> 1067 items = [conv(val) for (conv, val) in zip(converters, vals)] 1068 1069 # Then pack it according to the dtype's nesting ~\Anaconda3\lib\site-packages\numpy\lib\npyio.py in floatconv(x) 761 if '0x' in x: 762 return float.fromhex(x) --> 763 return float(x) 764 765 typ = dtype.type ValueError: could not convert string to float:
質問2つ目(グラデーションについて)
先ほど掲載したコードを(偶然?)通過したcsv(t=0vxvy.csv)についてのヒートマップです.
縦軸横軸は±10^6を確保したいですが,散らばっている点の数は高々1000であり現実的には1格子内に100以上集まることはなく最低値は0なので[0,99]の範囲内で20色程度のグラデーションにしたいです.それについてplt.contourf(Y,Z,p2,5)をいじってみましたが,うまく変わりません.
またグラデーションの色のパターンはmatplotlibでは変更できないのでしょうか?(白→赤,白→青,虹色みたいなやつです)
調べたらseabornというツールで色を変更している記事は見つかりましたが元々私はPython自体初心者なのでよく分からず困っています.
文章がやや分かりにくくて申し訳ありませんが,以上2点についてアドバイスよろしくお願いします.
補足情報(FW/ツールのバージョンなど)
Anacondaは一括して本日アップデートしました。
回答2件
あなたの回答
tips
プレビュー