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

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

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

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

Python

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

Q&A

解決済

1回答

582閲覧

pythonでのデータの抽出について

naoto8888

総合スコア21

Matplotlib

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

Python

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

0グッド

1クリップ

投稿2019/03/08 06:37

編集2019/03/09 06:12

python matplotlib で
下のコードのように媒介変数表示してグラフにプロットを行いたいのですが
x_all.append(x[0])の位置で invalid index to scalar variable.とエラーが出ます.
参考にしているコードではこの方法でプロットできているのですがなぜこちらだとエラーがでたのかが分かりません.何かうまくいく方法が分かる方は教えていただきたいです.

import

1import matplotlib.pyplot as plt 2import matplotlib.ticker as tick 3import math as m 4from matplotlib.animation import ArtistAnimation 5 6r = 190 7theta = np.arange(0,2*m.pi+1,0.1) 8 9plt.rc("font",family="serif") 10plt.figure() 11plt.xlim([-200,200]) 12plt.ylim([-200,200]) 13plt.plot(r*np.cos(theta),r*np.sin(theta)) 14 15plt.gca().xaxis.set_minor_locator(tick.MultipleLocator(1)) 16plt.gca().yaxis.set_minor_locator(tick.MultipleLocator(1)) 17plt.grid(which="minor") 18 19anim = [] 20tt = np.arange(0,10,0.1) 21 22x_all = [] 23y_all = [] 24 25omegas = 0.02*m.pi 26omegap = 0.02*m.pi 27omegac = 0.02*m.pi 28x0 = 0 29y0 = 0 30d = 50 31 32for t in tt: 33 x = (90*np.cos(omegas*t)+95)*np.cos(omegap*t)+d*np.cos(omegac*t) 34 y = (90*np.cos(omegas*t)+95)*np.sin(omegap*t)+d*np.sin(omegac*t) 35 x_all.append(x[0]) 36 y_all.append(y[0]) 37 im = plt.plot(x,y,"o",x_all,y_all,"--",color="red",markersize=10,linewidth=2,aa=TRUE) 38 anim.append(im) 39 40anim = ArtistAnimation(fig,anim) 41 42plt.show() 43 44コード

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

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

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

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

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

tiitoi

2019/03/08 06:51

コードの一部ではなく、import 文も含めて、コピペしたら動く完全なコードを貼っていただけますか?
tiitoi

2019/03/08 06:59

ちなみにエラーはスカラーに対して配列のように x[0]、y[0] と配列のように添え字を取ろうとしてエラーになっています。 x_all.append(x) y_all.append(y) でいいのではないですか?
naoto8888

2019/03/09 06:11

お返事が遅れてすみません. 完全なコードに貼り替えました. 追記していただいたもののようにまずはコードの書き換えをしてみます. ありがとうございました!
naoto8888

2019/03/09 06:19

追記していただいている内容で何とか作動はしました.しかし,前半の半径が190の円とアニメーションを同じ図上に表示させたいのですが,2つの画面が出てきてバラバラになってしまいます. こちらの解決方法についても教えていただけると幸いです。
guest

回答1

0

ベストアンサー

以下のコードで、アニメーションを出力できました。
ちなみに grid を1ミリ刻みで表示するのは描画にとても時間がかかりますし、画像で見ると潰れてしまってグリッドが見えないので、もう少し間隔を空けてもいいのではないでしょうか?

python

1#!/usr/bin/python 2# -*- coding: utf-8 -*- 3import matplotlib.pyplot as plt 4import matplotlib.ticker as tick 5import numpy as np 6from matplotlib.animation import ArtistAnimation 7 8# データを作成する。 9r = 190 10theta = np.linspace(0, 2 * np.pi, 1000) 11 12# 描画する。 13fig, ax = plt.subplots(figsize=(7, 7)) 14ax.set_xlim(-300, 300) 15ax.set_ylim(-300, 300) 16ax.plot(r * np.cos(theta), r * np.sin(theta)) 17 18ax.xaxis.set_minor_locator(tick.MultipleLocator(1)) 19ax.yaxis.set_minor_locator(tick.MultipleLocator(1)) 20ax.grid(which='minor') 21 22x_all = [] 23y_all = [] 24tt = np.arange(0, 10, 0.1) 25omegas = 0.02 * np.pi 26omegap = 0.02 * np.pi 27omegac = 0.02 * np.pi 28x0 = 0 29y0 = 0 30d = 50 31 32artists = [] 33for t in tt: 34 x = (90 * np.cos(omegas * t) + 95) * np.cos(omegap * t) + d \ 35 * np.cos(omegac * t) 36 y = (90 * np.cos(omegas * t) + 95) * np.sin(omegap * t) + d \ 37 * np.sin(omegac * t) 38 x_all.append(x) 39 y_all.append(y) 40 41 lines = ax.plot(x, y, 'o', x_all, y_all, '--', color='red', ms=3, lw=2) 42 artists.append(lines) 43 44anim = ArtistAnimation(fig, artists, interval=200) 45fig.show()

イメージ説明

投稿2019/03/09 07:37

tiitoi

総合スコア21956

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

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

naoto8888

2019/03/11 03:04

お返事遅れて申し訳ありません.回答本当にありがとうございます!こちらのようなものを作りたかったのでコード参考にさせていただきます!! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問