2 つの異なる変数の散布図を取得しようとしています。散布点の 1 つのセットは、空気抵抗の影響下にある発射体の高さの値であり、もう 1 つは空気抵抗のない発射体です。これは 1 セットのスキャッタポイントで機能しますが、両方では機能しません。ポイントにカーソルを合わせると、 mplcursors ライブラリを使用して注釈ラベルを表示しています。これは関連するコードです:
import numpy as np
from matplotlib import pyplot as plt
import mplcursors
# ...
fig, ax = plt.subplots()
nair_scatter = ax.scatter(nairRangeValues, nairHeightValues, c="blue", label="No air resistance", s=3)
air_scatter = ax.scatter(airRangeValues, airHeightValues, c="red", label="Air resistance", s=3)
ax.legend()
plt.xlabel("Range", size=10)
plt.ylabel("Height", size=10)
crs = mplcursors.cursor(ax,hover=True)
crs.connect("add", lambda sel: sel.annotation.set_text(
'Range {} m\nHeight {} m\nVelocity {} m/s at angle {} degrees\nDisplacement {} m\nTime of flight {} s' .format(
(sel.target[0]), (sel.target[1]),
(airVelocityValues[get_index(airRangeValues, sel.target[0])]),
(airAngleValues[get_index(airRangeValues, sel.target[0])]),
(airDisplacementValues[get_index(airRangeValues, sel.target[0])]),
(airTimeValues[get_index(airRangeValues, sel.target[0])]) ) ) )
crs2 = mplcursors.cursor(ax,hover=True)
crs2.connect("add", lambda ok: ok.annotation.set_text(
'Range {} m\nHeight {} m' .format(ok.target[0], ok.target[1])))
plt.show()
これにはいくつかの問題があります。まず、それは私に大きなエラーを与えStopIteration
、最後に言います。もう1つは、1セットの散布点に正しいラベルを表示するだけでなく、他の散布図ではなく同じ散布図のcrs2値も表示することです。誰かがそれを感謝するのを手伝ってくれるなら、それらが各スキャッタポイントセットに固有になるようにする方法がわかりません。