Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What to use instead of NavigationToolbar2TkAgg?

When I run the following script:

import tkinter as tk
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.figure
import matplotlib.backends.backend_tkagg
import numpy as np

def on_key_event(event, canvas, toolbar):
    matplotlib.backend_bases.key_press_handler(event, canvas, toolbar)

matplotlib.use('TkAgg')
root = tk.Tk()
root.wm_title('Test window')
fig = matplotlib.figure.Figure(figsize=(9.333, 7), dpi=100)
a = fig.add_subplot(111)
axes = fig.gca()
x = np.linspace(0, 2*np.pi, 100)
axes.plot(x, np.sin(x), marker='.')
axes.set_title('sin(x)')
axes.grid()
canvas = matplotlib.backends.backend_tkagg.FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(fill=tk.X, expand=1)
canvas.mpl_connect(
    'key_press_event',
    lambda event: on_key_event(event, canvas, toolbar)
)
toolbar = matplotlib.backends.backend_tkagg.NavigationToolbar2TkAgg(
    canvas, root
)
toolbar.update()
root.bind('<Control-w>', lambda event: root.destroy())
tk.mainloop()

I get a warning:

MatplotlibDeprecationWarning: The NavigationToolbar2TkAgg class was
deprecated in version 2.2.

Why is the NavigationToolbar2TkAg deprecated and what should I use instead?

like image 403
Håkon Hægland Avatar asked May 14 '18 12:05

Håkon Hægland


1 Answers

What to use instead?

Matplotlib now wants you to use

NavigationToolbar2Tk

instead of NavigationToolbar2TkAgg.

Why is it deprecated?

The Navigation toolbar is independent of the renderer. E.g. both the Agg renderer as well as the cairo renderer can use the same navigation toolbar. Hence it makes sense to provide it under a name that does not have the renderer's name ("Agg") in it.

like image 66
ImportanceOfBeingErnest Avatar answered Sep 19 '22 02:09

ImportanceOfBeingErnest