2

バッテリー充電器などのテスト曲線をすばやく分析するプログラムを作成しています。簡単に比較できるように、各曲線にスナップするホバーボックスを垂直線と組み合わせたいと思います。両方のコードをアクティブにすると、それらが衝突し、マウスを動かしているときに線が表示されます。停止すると線が消え、ホバーボックスが曲線にスナップしません。

ホバーボックスは mplcursors ライブラリから作成され、ラインは matplotlib のカーソル ウィジェットから作成されます。

図 1、以下のコードで作成された縦線

cursor = Cursor(
    ax2, useblit=True, horizOn=False, vertOn=True, color="red", linewidth=0.5
)

図 2、グラフからの情報を含むホバーボックス、以下のコード

mplcursors.cursor(hover=True)

ここに完全なコード:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Cursor
import mplcursors

data = np.loadtxt("test.txt")

x = data[:, 0]
y = data[:, 1]
y2 = data[:, 2]
y3 = data[:, 3]

fig = plt.figure(figsize=(13, 5))

ax = fig.add_subplot(111)

ax.plot(x, y, "--", label="Voltage")
ax.plot(x, y2, "-.", label="Current")


ax2 = ax.twinx()
ax2.plot(x, y3, "g:", label="Temperature")
ax2.set_ylabel("Celsius", color=("LightBlue"))
ax2.set_ylim(18, 100)

fig.legend(
    edgecolor=("DarkBlue"),
    facecolor=("LightBlue"),
    loc="upper right",
    bbox_to_anchor=(1, 1),
    bbox_transform=ax.transAxes,
)

ax.set_title("Test Surveillance", color=("Purple"))
ax.set_xlabel("Milliseconds", color=("LightGreen"))
ax.set_ylabel("Volts and Amps", color=("DarkGrey"))


plt.xlim(0)

# cursor = Cursor(
#     ax2, useblit=True, horizOn=False, vertOn=True, color="red", linewidth=0.5
# )
mplcursors.cursor(hover=True)

plt.show()

追加のボーナスとして: X 値は、この例では秒単位で測定されます (ミリ秒と表示されていることはわかっています)。写真のように 1:45:24 または x=5.77e+04 の代わりに何かを表示したいと思います。これは可能ですか?

4

1 に答える 1