質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

937閲覧

数値を符号、指数、仮数で色分けされた平行なグラフが描きたいです

putaro

総合スコア9

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/11/20 21:28

編集2020/11/22 20:28

前提・実現したいこと

下の表のようなモーションセンサーのデータを測定した、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ファイルの例

xyz
-0.0021822779404043102-0.011354400497599271-0.021566487675835376
-0.0017871699694951530.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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/11/20 23:34

csvファイルのサンプルと現在のグラフと理想のグラフの3点を質問に追記してほしいです。
can110

2020/11/21 05:45

エラーが再現しません。白紙のグラフが表示されます。 提示されたCSVファイルの結果、どのようなグラフイメージを得たいのかを 手書きなりでよいので提示ください。
meg_

2020/11/21 09:02

質問のコードとデータを元にこちらで試したところ下記エラーが発生しました。 Traceback (most recent call last): y = np.arange(0,index_list(i),1) TypeError: 'list' object is not callable
toast-uz

2020/11/21 10:43

csvファイルの行数をy軸とし、x軸を64ビットの数値表現として・・・ 目的と例が全くわからないので、教えてください。
putaro

2020/11/21 18:00

ご質問ありがとうございます。自分の伝え方があまりにひどくて申し訳ございません。 追加で描きたいグラフを(手書き)の画像を載せました。 ご指摘頂いたエラーを修正しました y = np.arange(0,len(index_num_list[i]),1)
meg_

2020/11/22 00:25

> y = np.arange(0,len(index_num_list[i]),1) 上記コードは質問のコード中にはありません。修正を確認できません。
putaro

2020/11/22 02:35

返信ありがとうございます。リストの追加方法が間違っておりました 変更前---> index_list.append(df) 修正---> index_list.append(index)
meg_

2020/11/22 03:26

今度は > ax = fig.add_subplot(3,len(df_list)/3,i + 1,title="64bit_graph",ylim=(index_list[i],0)) の部分で「ValueError: Number of columns must be > 0, not 0」が発生しました。 質問者さんと同じエラー”x and y must have same first dimension, but have shapes (2,) and (1,)”が発生せず検証不可でした。何故同じ状況が発生しないのかは分かりませんがお力にはなれませんでした。
putaro

2020/11/22 20:47 編集

とんでもないです、ご協力ありがとうございます。 matplotlib.pyplot.axhlineを使用して、水平な直線を描くことができました 自分のやり方がどのように間違っていたのか、しっかり考えたいと思います。
guest

回答1

0

自己解決

python

1#y軸 2y=np.arange(0,index_list[0],1) 3 4ax = fig.add_subplot(1,1,1,title="64bit_graph",ylim=(index_list[0],0),xlim=(0,64)) 5for s in y: 6 #平行な直線を引く 7 plt.axhline(y=int(y[s]),xmin=0.0,xmax=0.016,color="y") 8 plt.axhline(y=int(y[s]),xmin=0.016,xmax=0.17,color="g") 9 plt.axhline(y=int(y[s]),xmin=0.17,xmax=1.0,color="b")

#描いたグラフ
イメージ説明
x軸に対して平行な直線を描いた図
#まとめ
matplotlib.pyplot.axhlineを使って平行な直線を描くことができました。
該当のソースコードも修正しました。

投稿2020/11/22 20:39

編集2020/11/22 20:48
putaro

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問