前提・実現したいこと
下の表のようなモーションセンサーのデータを測定した、csvファイルのデータの行数を取得しその値を利用して、
xの定義域(0 <= x <= 64)、yの値域(0 <= Yn <= n - 1)
Yn = Kn
のx軸に対して平行な直線を描きたいです。
ここで、nは取得したデータの行数の連番({n|n=0,1,2,....,n-1)を表していて、Knはその行数番号の連番の値{Kn|0 <= Kn <= n-1}です。
今回実現したいことは、この直線が、64ビットの浮動小数点を表していると仮定して、xをある定義域、(0〜1)までを符号部、(1〜11)までを指数部、最後に(11〜63)までを仮数部として、直線の色を変えていきたいです
発生している問題・エラーメッセージ
yの値(行数の数)ごとにx軸に対して平行で3色に分けられたグラフのプロットを試みたつもりなのですが...うまくいきませんでした
エラーメッセージ
x and y must have same first dimension, but have shapes (2,) and (1,)
該当のソースコード
python
1root_path = "#目的のファイルがあるフォルダまでのパス" 2file_path = pathlib.Path(root_path) 3 4csv_file_path = list(file_path.glob("*.csv")) 5 6df_list = [] 7index_list = [] 8 9for d in csv_file_path: 10 df = pd.read_csv(d,dtype=str,header=None) 11 df_list.append(df) 12 #行列数を取得 13 index = len(df) 14 index_list.append(index) 15 16fig = plt.figure() 17 18#リスト番号の0番目の値 19#y軸 20y=np.arange(0,index_list[0],1) 21 22ax = fig.add_subplot(1,1,1,title="64bit_graph",ylim=(index_list[0],0),xlim=(0,64)) 23for s in y: 24 plt.axhline(y=int(y[s]),xmin=0.0,xmax=0.016,color="y") 25 plt.axhline(y=int(y[s]),xmin=0.016,xmax=0.17,color="g") 26 plt.axhline(y=int(y[s]),xmin=0.17,xmax=1.0,color="b") 27plt.show()
#読み込んだcsvファイルの例
x | y | z |
---|---|---|
-0.0021822779404043102 | -0.011354400497599271 | -0.021566487675835376 |
-0.001787169969495153 | 0.0033697903852851594 | -0.015884067258401774 |
0.006165254335445933 | -0.005569805768012884 | -0.006603589812139398 0.008625260373964556 | 0.002838294734545343 | -0.02680668760096887
-0.005034634878809447 | -0.006784316103084711 | -0.0372773035594495
||||
#理想のグラフ(手書き)
取得した行数n=3の時、x軸に平行で、かつある定義域ごとに色が変わる直線の例
試したこと
水平グラフ表示のplt.axhlineも試したがうまくいかなかった
綺麗ではない手書きのグラフですみません、その上、数学も....
まだ初心者でわからないことだらけですがよろしくお願いします。
補足情報(FW/ツールのバージョンなど)
macbook air 2013
python 3.8.0
matplotlib 3.3.2
numpy 1.19.4
pandas 1.1.4
回答1件
あなたの回答
tips
プレビュー