pythonプログラム
Q&A
Closed
解決したいこと
Pythonのプログラムなのですがどのように作成すればよいのかわかりません。
教えていただきたいです。
発生している問題・エラー
自分で試したこと
グラフは表示されましたが、何も書かれていませんでした。
Q&A
Closed
Pythonのプログラムなのですがどのように作成すればよいのかわかりません。
教えていただきたいです。
グラフは表示されましたが、何も書かれていませんでした。
「グラフは表示されましたが、何も書かれていませんでした。」とありますので、先生から配布されたのか、自分で書いたコードがあるということですね?
回答者側にとってはそれを見せていただかないと何をアドバイスすればいいのか分からないので、掲載していただきたいです。
また、「どこが」分からないかも明示するととても回答しやすくなるので、ぜひお願いします。
あるいは、ChatGPTにそのままコードをコピペして指示すると回答してもらえるかもしれませんね。
@dtwice369
Questioner
import matplotlib.animation as animation
import matplotlib.pyplot as plt
import numpy as np
g = 9.8 # 重力加速度
y0 = 20 # 初期位置 (y)
theta = 45 # 投射角度 (deg)
v0 = 10 # 初速度
t = 100 # 時間
x = 0 # 水平位置
y = y0 # 鉛直位置
vx = v0 * np.cos(theta) # 水平方向の速度
vy = v0 * np.sin(theta) # 鉛直方向の速度
dt = 0.01 # 時間刻み
b = 0.01 # 空気抵抗係数
fig = plt.figure()
ax = fig.add_subplot(111)
line, = ax.plot([], [], lw=2)
def update(frame):
global x, y, vx, vy
# 位置の更新
x += vx * dt
y += vy * dt - 0.5 * g * dt ** 2 + b * vy * dt
# 速度の更新
vx = vx
vy = vy - g * dt - b * vy
# グラフの更新
line.set_data([x], [y])
return line,
ani = animation.FuncAnimation(fig, update, frames=np.arange(0, 50, dt), interval=20, repeat=False)
plt.show()
回答ありがとうございます。
上記のようなプログラムを作成し実行しましたがスクリーンショットのようになってしまいます。
ありがとうございます
僕が気づいていないだけで、他にいくつか問題点があるかもしれませんが、まずはこちらを直してみてください
line.set_data([x], [y])
これだとlineのデータが一つしかできません
データはxの値のリスト、yの値の過去の値全てを含んだリストであるべきです
その二つのリストを作り、値全てを格納し、それをset_plot()に入れてみてください
fig = plt.figure()
ax = fig.add_subplot(111)
(1,1,1)では? 次の1行で書けます。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
x = [1,2,3,4,5]
y = [2,3,4,5,6]
ax.plot(x, y)
plt.show()
最初はアニメーションを度外視して、グラフ表示に専念して下さい。
import matplotlib.pyplot as plt
import time
fig, ax = plt.subplots()
x = [1,2,3,4,5]
y = [2,3,4,5,6]
for i in range(len(x)):
ax.plot(x[:i+1], y[:i+1])
plt.show()
time.sleep(1.5)
パラパラ漫画は可能でしょうか?5枚の画面が表示されるだけでしょうか?
plt.show()
for i in range(len(x)):
ax.plot(x[:i+1], y[:i+1])
time.sleep(1.5)
こんなことは? 机上の空論ですみません。