Grafik değerlerini mousemin yanında görebilir miyim?

sağ alltaki x değerlerini grafiğimin üzerindeki çizgilerin üzerinde gezerken çıkıyor. Bu değerleri ben grafiğin üstünde gezerken mousemin hemen yanında yazacak şekilde ayarlayabilir miyiz ?

Kodlarını atabilir misiniz?

1 Beğeni
import matplotlib.pyplot as plt
import requests

url="https://api.covid19api.com/dayone/country/turkey"

f=requests.get(url)
d=f.json()


date=[]
confirmed=[]

for x in range (0,len(d)-1):
    date.append(d[x]["Date"])
    confirmed.append(d[x]["Confirmed"])

plt.plot(date,confirmed)
plt.xticks(range(0, len(date), 20))
plt.xticks(rotation=20)
plt.show()

PyAutoGui ile yapabilirsiniz.

@throwaway1 konuyu tekrar gündeme getirmiş, o zaman görmemişim bu konuyu. PyAutoGui kullanmaya gerek yok bu örnekte. Matplotlib; Tkinter veya başka GUI kütüphaneleriyle uyumlu bir şekilde çalışır. Mouse hareketi için olay eklemeniz gerekiyor.

Aşağıda bununla alakalı bir örnek görüyorsunuz.

import tkinter as tk

from random import randint
from matplotlib import pyplot as plt
from matplotlib.dates import num2date
from datetime import (datetime as dt, timedelta as td)
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg        

root = tk.Tk()

# Matplotlib canvasının yerleştirileceği tkinter widgetini oluşturalım.
frame = tk.Frame(master=root)
frame.pack(fill="both", expand=True)

# Figure nesnesini oluşturuyoruz.
fig = plt.Figure()

# Canvas nesnesini oluşturuyoruz.
canvas = FigureCanvasTkAgg(
    figure=fig,
    master=frame
)
# Canvas'ı yerleştirelim.
canvas.get_tk_widget().pack(fill="both", expand=True)

# Navigasyon çubuğu olarak kullanacağımız label widgeti
label = tk.Label(master=None, text="", bg="white")
label.place(x=0, y=0)

# Ax'ı oluşturalım.
ax = fig.add_subplot(111)

# Örnek verileri tanımlayalım.
# x_data, şimdiki zamandan sonraki ilk 100 güne ait veridir, 
# y_data ise 1 ile 100 arasında rastgele değerler
# alan 100 elemanlı bir listedir.
x_data = [dt.now() + td(days=i) for i in range(100)]
y_data = [randint(1, 100) for i in range(100)]

# Verileri plot_date fonksiyonunu çağırarak ax'a yerleştirelim.
ax.plot_date(
    x_data,
    y_data,
    color="blue",
    linewidth=1,
    fmt="-",
)

# X eksenindeki etiketlerin eğimini 45 derece yapalım ki etiketler
# birbirine karışmasın.
for i in ax.xaxis.get_ticklabels():
    i.set_rotation(45)

# Grafiğin ekrandaki konumunu ayarlayalım.
fig.subplots_adjust(
    left=0.2,
    bottom=0.4,
    right=0.9,
    top=0.9,
    wspace=0.2,
    hspace=0
)

# Grafiğin çizilmesi için draw fonksiyonunu çağıralım.
canvas.draw()


# Mouse'ın hareket etmesiyle çalışacak olan fonksiyon.
def on_motion(event, canvas, label):
    # Eğer event.xdata'nın içindeysek
    if event.xdata:
        # event.xdata'yı tarih verisine çevir.
        x = num2date(event.xdata).strftime("%Y.%m.%d %H:%M:%S")
        # event.ydata'yı yuvarlayarak alalım.
        y = round(event.ydata, 2)
        # navigasyon olarak kullanılacak etiket widgetinin
        # x ve y değerlerini değiştirelim.
        label.place_configure(x=event.guiEvent.x, y=event.guiEvent.y)
        # etiket widgetinin text parametresini değiştirelim
        label["text"] = f"x = {x}, y = {y}"
    # Aksi durumda text'i silelim.
    else:
        label["text"] = ""        
   

# Mouse hareketi olayını canvasa bağlayalım.    
canvas.mpl_connect(
    "motion_notify_event",
    lambda event: on_motion(event, canvas, label)
)

root.mainloop()

4 Beğeni