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

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

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

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

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

Q&A

解決済

2回答

1443閲覧

連続してグラフを表示する方法

momo0729

総合スコア1

Matplotlib

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

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

0グッド

0クリップ

投稿2021/12/16 07:46

編集2021/12/17 07:12

![イメージ説明
XとZ(Y)の値がそれぞれ10点ずつ分かっています。この値を使いプロットした点と近似線を描きたいと考えています。一度目のグラフはxの点の値を2点とzの点の値の2点を利用した2点を結ぶグラフを、二度目のグラフはxの点の値を3点とzの点の値の3点を利用した3点を結ぶ近似線を描きたいと考えています。そのような流れで9回目は10点を使ったグラフを描きたいです。分かる方がいらっしゃればご協力をお願いします。近似の方法については理解しているので連続したグラフの書き方を教えて頂きたいです。

python

1コード 2import matplotlib.pyplot as plt 3import numpy as np 4import math 5 6 7M1_pc_x= -246.85208505175171 8M2_pc_x= -206.0777831639721 9M3_pc_x= -158.6928488559446 10M4_pc_x= -109.03772091048792 11M5_pc_x= -56.70788713910241 12M6_pc_x= 57.381886142634436 13M7_pc_x= 119.77207995050162 14M8_pc_x= 185.73675716265856 15M9_pc_x= 255.11219747743775 16M10_pc_x= 327.6548726847677 17 18x = np.array([M1_pc_x, M2_pc_x, M3_pc_x, M4_pc_x, M5_pc_x, M6_pc_x, M7_pc_x, M8_pc_x, M9_pc_x, M10_pc_x]) 19 20 21M1_pc_z= 621 22M2_pc_z= 632 23M3_pc_z= 648 24M4_pc_z= 666 25M5_pc_z= 687 26M6_pc_z= 719 27M7_pc_z= 744 28M8_pc_z= 767 29M9_pc_z= 789 30M10_pc_z= 810 31 32z1 = np.array([M1_pc_z, M2_pc_z, M3_pc_z, M4_pc_z, M5_pc_z, M6_pc_z, M7_pc_z, M8_pc_z, M9_pc_z, M10_pc_z]) 33 34xz1 = x*z1 35x2 = x*x 36n = len(x) 37for n in range(len(x)): 38 m_y = ((n*sum(xz1)-sum(x)*sum(z1)) / (n*sum(x2)-sum(x)*sum(x))) 39 y_angle = math.atan(m_y) 40 b_y = ((sum(z1) - m_y*sum(x)) / n) 41 Y1 = (m_y*x) + b_y 42 43for Mc_pc_x , Mc_pc_z in zip (x,z1): 44 45 fig = plt.figure(figsize=(8.0, 6.0)) 46 plt.title("yaw") 47 plt.xlabel("X-axis") 48 plt.ylabel("Z-axis") 49 50 51 plt.scatter(i,j,label="original") 52 plt.plot(i,Y1,label="fitting",color='r') 53 plt.legend() 54 55 56plt.show()

現在は1つ目のグラフで1つ目の値が、2つ目のグラフで2つ目の値のみが、・・・10個目のグラフで10個目の値のみが記される状況となっています。(近似線は全てに表示されています)

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

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

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

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

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

ppaul

2021/12/16 08:09

エラーが出ないような修正は可能ですが、おそらくmomo0729さんが求めるものとは違っています。 欲しいものを普通の日本語で書いてみてください。
momo0729

2021/12/16 08:19

承知しました。私はグラフを合計9回描きたいと考えています1回目のグラフはM1_pc_x、M2_pc_x、M1_pc_z、M2_pc_zの計4点を用い近似線(2点しかないためずれは生じませんが)を、2回目以降のグラフはM1_pc_x、M2_pc_x、M3_pc_x、M1_pc_z、M2_pc_z、M3_pc_zの計6点を用いその点とその点に近似する直線を、同様に3,4,5回とグラフを描き最後の9回目は全ての値を使った近似線を描きたいと考えています。
bsdfan

2021/12/16 22:47

ひとつのグラフに9本の線をプロットしたいという意味であってますか? それとも9個のグラフに1本ずつプロットしたいのでしょうか?
momo0729

2021/12/17 02:26

後者です。1つ目のグラフはM1_pc_xとM1_pc_zの値を1つ目の点として、M2_pc_x、M2_pc_zを2点目の点としてプロットしその近似線を描きたいと考えています。2つ目のグラフはM1_pc_x、M1_pc_zを1点目の点、M2_pc_x、M2_pc_zを2点目の点M3_pc_x、M3_pc_zを3点目の点としてプロットしそれぞれの点の近似線を描きたいと考えています。そのため最終的に9個のグラフが出来上がるようにしたいです。ややこしくて申し訳ございません。
guest

回答2

0

ベストアンサー

散布図+近似線を別々のウィンドウで 9 枚表示するのであれば以下の様にします。

python

1import matplotlib.pyplot as plt 2import numpy as np 3import math 4 5X = np.array([ 6 -246.85208505175171, -206.0777831639721, -158.6928488559446, 7 -109.03772091048792, -56.70788713910241, 57.381886142634436, 8 119.77207995050162, 185.73675716265856, 255.11219747743775, 9 327.6548726847677 10]) 11 12Z1 = np.array([ 13 621, 632, 648, 666, 687, 719, 744, 767, 789, 810 14]) 15 16def plot_window(idx): 17 x, z = X[:idx], Z1[:idx] 18 m, b = np.polyfit(x, z, 1) 19 20 plt.figure(idx, figsize=(4.0, 3.0)) 21 plt.subplots_adjust(left=0.15, right=0.95, top=0.9, bottom=0.15) 22 plt.title(f"yaw {idx} points") 23 plt.xlabel("X-axis") 24 plt.ylabel("Z-axis") 25 plt.xlim(-300, 350) 26 plt.ylim(600, 850) 27 28 plt.scatter(x, z, label="original") 29 plt.plot(x, m*x + b, label="fitting", color='r') 30 plt.legend() 31 32if __name__ == '__main__': 33 for i in range(2, len(X)+1): 34 plot_window(i) 35 36 plt.show()

イメージ説明

投稿2021/12/17 17:13

melian

総合スコア19865

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

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

momo0729

2021/12/18 13:10

ありがとうございます! これが私がしたかったことです。
guest

0

  • 最終的に9個のグラフが出来上がるようにしたいです。

【matplotlib.pyplot】subplotsを使ってグラフを描画する方法を見ればできるでしょう。

投稿2021/12/17 06:23

ppaul

総合スコア24666

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

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

momo0729

2021/12/17 07:03

そういう意味では無いのです... 自分の説明が下手ですいません。 画像を載せたのでそれで理解して頂けると助かります。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問