🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

1回答

1901閲覧

グラフ表示をしたいが、出力されないので改善しているところです

keisokukunn

総合スコア9

Python

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

0グッド

0クリップ

投稿2021/01/12 07:52

編集2021/01/12 08:36

前提・実現したいこと

csvファイルからデータを読み込み、そのデータをFFT処理を行い、グラフ化するプログラムを作成しています。下図のような状況です。グラフ表示(FFT後)について、グラフ表示のための改善についてご協力をお願いします。
イメージ説明

発生している問題・エラーメッセージ

エラーメッセージは出ないのですが、グラフがプロットされていない状態で出力されます。

エラーメッセージ

該当のソースコード

python

1import numpy as np 2import pandas as pd 3import matplotlib.pyplot as plt 4df=pd.read_csv("/data/python検証.csv") 5N=len(df) 6fs=50000 7#時間軸のデータ作成 8t=np.arange(0,N*(1/fs),1/fs) 9 10#周波数軸のデータ作成 11fq=np.linspace(0,1.0/fs,N) 12for i in range(200,1550,50): 13 14 #2次元配列から1次元配列に変更 15 data=df[str(i)+"[Hz]"].values 16 17 #グラフ表示(元) 18 plt.figure(figsize=(6,4)) 19 plt.plot(t,data) 20 plt.title(str(i)+"[Hz]") 21 plt.xlabel("time[s]",fontsize=14) 22 plt.ylabel("signal intensity",fontsize=14) 23 plt.show() 24 25 #読み込んだデータをフーリエ変換 26 data_FFT=np.fft.fft(data) 27 #FFTの複素数結果を絶対値に変換 28 data_FFT_abs=abs(data_FFT) 29 #print(str(i)+"[Hz]"+str(data_FFT)) 30 #print(str(i)+"[Hz]:\n"+str(data_FFT_abs)) 31 32 #グラフ表示(FFT後) 33 plt.figure(figsize=(6,4)) 34 plt.title(str(i)+"[Hz]") 35 plt.plot(fq[:int(N/2)+1],data_FFT_abs[:int(N/2)+1]) 36 plt.xlabel("frequency[Hz]",fontsize=14) 37 plt.ylabel("signal intensity",fontsize=14) 38 plt.xlim(0,2000) 39 plt.show() 40 if i==1500: 41 break

試したこと

グラフ表示(元)はプロットされた状態でグラフが出力されています。
イメージ説明

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

tiitoi

2021/01/12 08:24

「#グラフ表示(FFT後)」の次の行で「print(fq[:int(N/2)+1],data_FFT_abs[:int(N/2)+1])」を入れて出力を確認するとどうなってますか? データが入ってないか、plt.xlim(0,2000) で制限してるxの範囲にデータがないのではないでしょうか。 「plt.xlim(0,2000)」を消してみてください
keisokukunn

2021/01/12 08:37

指示して頂いた通りにやってみたところ、上記(試したことを参照してください)のようになりました。 依然として、プロットはされていませんでした。
tiitoi

2021/01/12 08:41

Jupyter Notebook であればカーネルリスタートしてください
jbpb0

2021/01/12 08:56 編集

fs=50000 fq=np.linspace(0,1.0/fs,N) だと、fqの最大値は 1/50000=0.00002 です plt.xlim(0,2000) だと、ほぼ0ですね 【追記】t=np.arange(0,N*(1/fs),1/fs) から考えて、 fq=np.linspace(0,fs,N) でしょうね
A_kirisaki

2021/01/12 09:02

jbpb0 さんに :+1:。xlimit 変えたら出てきました。
icemanstanding

2021/01/12 09:30 編集

data_FFT_abs=abs(data_FFT)の後に print(data_FFT_abs)を入力すると数字は表示されますか? もし、数字が出るのなら、一旦、 plt.plot(fq,data_FFT_abs)でプロットを試してみてはいかがですか?
jbpb0

2021/01/12 09:41

icemanstandingさん > 一旦、plt.plot(fq,data_FFT_abs)でプロットを試して それが「試したこと」の2つ目のグラフです 横軸の最大値が 1/50000/2=0.00001 になってます
guest

回答1

0

ベストアンサー

時間が

python

1t=np.arange(0,N*(1/fs),1/fs)

なら、

python

1fs=50000

は50KHzでサンプリングしている、という意味ですよね

その場合の周波数の計算は、

python

1fq=np.linspace(0,fs,N)

です

投稿2021/01/12 09:45

jbpb0

総合スコア7653

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

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

keisokukunn

2021/01/12 15:19

ありがとうございます。単純なミスでした。ちゃんとプロットされました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問