Wait time is the worst
I can hardly sit
No one has the time
Someone is always late
--The Strokes, Call Me Back (2011)The callback system in Matplotlib is central to its interactivity. Unless you are working with the interactive plotting mode on, execution of the script stops when plt.show()
is called. Without the ability to execute any additional code, the only way to program interactivity is to register actions to be taken upon some event such as a button click, mouse cursor motion, or key press. Matplotlib's callback system has a base set of events and many callbacks that we have already discussed, such as the default keymap discussed in the previous chapter and the ability to pan a plot. Furthermore, it is possible to add new kinds of events, giving the developer full access to Matplotlib's cross-platform callback system.
The callback system is figure-oriented. Any GUI action that can trigger a callback can only happen to whichever figure window is currently in focus. There are no global actions that can trigger callbacks across multiple figures. The callback function will get an Event object that contains pertinent information about the fired event. In the following example, we will hook up two events to a figure: a keyboard button press and a mouse button press. There are two callback functions, each printing out some of the available pieces of information for their respective events:
Code: chp2/basic_mpl_connect.py
from __future__ import print_function import matplotlib.pyplot as plt def process_key(event): print("Key:", event.key) def process_button(event): print("Button:", event.x, event.y, event.xdata, event.ydata, event.button) fig, ax = plt.subplots(1, 1) fig.canvas.mpl_connect('key_press_event', process_key) fig.canvas.mpl_connect...
What is the purpose of interactive plotting? Why is it important for Matplotlib to provide this feature? It is important because you want to interact with your data. What you plot in the figure is a visual representation of your data, and giving it interactivity brings that data an extra step closer to the real world by providing your users the means to interact with that data in a more physically intuitive manner. It is all about data exploration.
So far, for our project, we have only developed the means to display our storm and radar data. While we could simply use these viewers and then manually edit the associated shapefile, it would not be practical. We should be able to provide users the means to interrogate their data. To do this, we will use pick_event
to add the ability to select and deselect some tracks. As a simple example, we will make a track thicker when it is selected and make it thinner when it is deselected (or simply, selected again). Let's build upon...
Try the previous radar example again. This time, go forward a few frames and then zoom in with the zoom tool. Now go back a frame.
Go ahead, I'll wait.
Surprised? Remember that Matplotlib has its own built-in keymap. In the default keymap, the left arrow means to go back to a previous view. When we zoomed in and then pressed the left arrow key, not only did we go back a frame via our callback, but we also went back to the original view prior to zooming via Matplotlib's default keymap. The default keymap is a very important and useful feature for providing basic interactivity for most users. However, when developing your own application using Matplotlib, you might want to disable Matplotlib's keymap entirely. The following example shows how to do that while demonstrating the next important feature of the callback system: disconnecting a callback. In this example, you can now press any non-system key or combination of keys without ever triggering...
We can see that our application is going to grow in complexity very soon add we continue to add features. Our current manner of keymapping is probably not going to be easily maintainable as the number of actions increase. Let's take a moment to implement something better. The most essential feature of a keymap is to tie a predefined action to an arbitrary key or key combination. This seems like the perfect job for a dictionary. Furthermore, as the keymap grows, it will become important to be able to display the keymap in a helpful manner to your users. Each key/action pair will need to come with a description that can later be displayed on demand. Also, keeping in mind that our ControlSys
class is likely to grow in complexity soon, let's implement this keymap feature as a separate class that ControlSys
will inherit. The code is as follows:
Source: chp2/stormcell_anim_with_keymap.py
class KeymapControl: def __init__(self, fig): self.fig = fig # Deactivate...
We demonstrated pick events earlier, showing how to select a storm track, changing its thickness, but we haven't incorporated picking into our current design yet. Much in the same vein as the KeymapControl
class, let's create a PickControl
class that will keep a list of pick functions (pickers) and manage their connection to the callback system for us:
Source: chp2/select_stormcells.py
class PickControl: def __init__(self, fig): self.fig = fig self._pickers = [] self._pickcids = [] def connect_picks(self): for i, picker in enumerate(self._pickers): if self._pickcids[i] is None: cid = self.fig.canvas.mpl_connect('pick_event', picker) self._pickcids[i] = cid def disconnect_picks(self): for i, cid in enumerate(self._pickcids): if cid is not None: self.fig.canvas.mpl_disconnect(cid) self._pickcids[i] = None def add_pick_action...
The callback system is figure-oriented. Any GUI action that can trigger a callback can only happen to whichever figure window is currently in focus. There are no global actions that can trigger callbacks across multiple figures. The callback function will get an Event object that contains pertinent information about the fired event. In the following example, we will hook up two events to a figure: a keyboard button press and a mouse button press. There are two callback functions, each printing out some of the available pieces of information for their respective events:
Code: chp2/basic_mpl_connect.py
from __future__ import print_function import matplotlib.pyplot as plt def process_key(event): print("Key:", event.key) def process_button(event): print("Button:", event.x, event.y, event.xdata, event.ydata, event.button) fig, ax = plt.subplots(1, 1) fig.canvas.mpl_connect('key_press_event', process_key) fig.canvas.mpl_connect('button_press_event', process_button...
What is the purpose of interactive plotting? Why is it important for Matplotlib to provide this feature? It is important because you want to interact with your data. What you plot in the figure is a visual representation of your data, and giving it interactivity brings that data an extra step closer to the real world by providing your users the means to interact with that data in a more physically intuitive manner. It is all about data exploration.
So far, for our project, we have only developed the means to display our storm and radar data. While we could simply use these viewers and then manually edit the associated shapefile, it would not be practical. We should be able to provide users the means to interrogate their data. To do this, we will use pick_event
to add the ability to select and deselect some tracks. As a simple example, we will make a track thicker when it is selected and make it thinner when it is deselected (or simply, selected again). Let's build upon the track...
Try the previous radar example again. This time, go forward a few frames and then zoom in with the zoom tool. Now go back a frame.
Go ahead, I'll wait.
Surprised? Remember that Matplotlib has its own built-in keymap. In the default keymap, the left arrow means to go back to a previous view. When we zoomed in and then pressed the left arrow key, not only did we go back a frame via our callback, but we also went back to the original view prior to zooming via Matplotlib's default keymap. The default keymap is a very important and useful feature for providing basic interactivity for most users. However, when developing your own application using Matplotlib, you might want to disable Matplotlib's keymap entirely. The following example shows how to do that while demonstrating the next important feature of the callback system: disconnecting a callback. In this example, you can now press any non-system key or combination of keys without ever triggering a built...
We can see that our application is going to grow in complexity very soon add we continue to add features. Our current manner of keymapping is probably not going to be easily maintainable as the number of actions increase. Let's take a moment to implement something better. The most essential feature of a keymap is to tie a predefined action to an arbitrary key or key combination. This seems like the perfect job for a dictionary. Furthermore, as the keymap grows, it will become important to be able to display the keymap in a helpful manner to your users. Each key/action pair will need to come with a description that can later be displayed on demand. Also, keeping in mind that our ControlSys
class is likely to grow in complexity soon, let's implement this keymap feature as a separate class that ControlSys
will inherit. The code is as follows:
Source: chp2/stormcell_anim_with_keymap.py
class KeymapControl: def __init__(self, fig): self.fig = fig # Deactivate the...Description
This book is intended for Python programmers who want to do more than just see their data. Experience with GUI toolkits is not required, so this book can be an excellent complement to other GUI programming resources.
Who is this book for?This book is intended for Python programmers who want to do more than just see their data. Experience with GUI toolkits is not required, so this book can be an excellent complement to other GUI programming resources.
Estimated delivery fee Deliver to United StatesEconomy delivery 10 - 13 business days
Free $6.95
Premium delivery 6 - 9 business days
$21.95
(Includes tracking information) Product DetailsPublication date, Length, Edition, Language, ISBN-13
Publication date : Mar 24, 2015
Length: 174 pages
Edition : 1st
Language : English
ISBN-13 : 9781783988846
What do you get with Print? OR Contact DetailsPayment Processing...
Completed Shipping AddressBilling is same as shipping information
Estimated delivery fee Deliver to United StatesEconomy delivery 10 - 13 business days
Free $6.95
Premium delivery 6 - 9 business days
$21.95
(Includes tracking information) Product DetailsPublication date : Mar 24, 2015
Length: 174 pages
Edition : 1st
Language : English
ISBN-13 : 9781783988846
Packt SubscriptionsSee our plans and pricing Rating distribution5 star 50%
4 star 0%
3 star 16.7%
2 star 0%
1 star 33.3%
FilterAll
All
Amazon verified reviews
Amazon verified reviews
All stars
All stars
5 Star only
5 Star only
4 Star only
4 Star only
3 Star only
3 Star only
2 Star only
2 Star only
1 Star only
1 Star only
Sanjay Mishra Dec 30, 2019
If you need to quickly produce graphs and charts and explore data, this is the book for you.You could possibly get the same information from user manuals, blog posts and such like given enough time, but this book makes it easy to grasp the information and be quickly productive.
Amazon Verified reviewJuan Nunez-Iglesias Apr 03, 2018
I highly recommend Ben's book. I fumbled around for a long time with minor interactive matplotlib features. Then I read his book and it completely clarified my mental model of mpl interactivity and, indeed, of GUIs in general.Here's an excerpt that describes my story quite well:"""Indeed, given that the primary audience for Matplotlib is scientific programmers for whom GUIs are, at best, an afterthought, Matplotlib provides a gradual curve to create full-fledged GUI applications. For simple GUI tasks, one can go quite far with Matplotlib without ever having to adopt a GUI platform. And, as we will see in the next chapter, taking those final steps into a GUI application would not require getting rid of any existing code."""If you're a scientist looking to add a bit of interactivity to your data, or to move from a purely command-line interface to providing some graphical interactivity and control, this is a fantastic book to start with. Even if you end up using some newer frameworks such as Bokeh, the ideas in this book about GUI loops and callbacks will be useful forever.
Amazon Verified reviewDr. Andrew G. Meigs Feb 04, 2016
Good book, but a bit short. Nice tidbits throughout.
Amazon Verified reviewPhu ta Feb 18, 2016
I think the overall content is okay, good for beginners who want to learned to develop interactive Python app. Keep in mind that specifically builds up a weather application in Matplotlib. So depend on your interest, it may or may not be helpful.
Amazon Verified reviewPhilip H Sep 15, 2018
A few pages on plotting; the rest of the book is junk. I would ask for my money back if I could!
Amazon Verified review FAQsWhen you buy any Print edition of our Books, you can redeem (for free) the eBook edition of the Print Book you’ve purchased. This gives you instant access to your book when you make an order via PDF, EPUB or our online Reader experience.
Shipping Details
USA:
'
Economy: Delivery to most addresses in the US within 10-15 business days
Premium: Trackable Delivery to most addresses in the US within 3-8 business days
UK:
Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable
Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands
EU:
Premium: Trackable delivery to most EU destinations within 4-9 business days.
Australia:
Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.
Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.
India:
Premium: Delivery to most Indian addresses within 5-6 business days
Rest of the World:
Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days
Asia:
Premium: Delivery to most Asian addresses within 5-9 business days
Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.
Unfortunately, due to several restrictions, we are unable to ship to the following countries:
Customs duty are charges levied on goods when they cross international borders. It is a tax that is imposed on imported goods. These duties are charged by special authorities and bodies created by local governments and are meant to protect local industries, economies, and businesses.
The orders shipped to the countries that are listed under EU27 will not bear custom charges. They are paid by Packt as part of the order.
List of EU27 countries: www.gov.uk/eu-eea:
A custom duty or localized taxes may be applicable on the shipment and would be charged by the recipient country outside of the EU27 which should be paid by the customer and these duties are not included in the shipping charges been charged on the order.
The amount of duty payable varies greatly depending on the imported goods, the country of origin and several other factors like the total invoice amount or dimensions like weight, and other such criteria applicable in your country.
For example:
Cancellation Policy for Published Printed Books:
You can cancel any order within 1 hour of placing the order. Simply contact customercare@packt.com with your order details or payment transaction id. If your order has already started the shipment process, we will do our best to stop it. However, if it is already on the way to you then when you receive it, you can contact us at customercare@packt.com using the returns and refund process.
Please understand that Packt Publishing cannot provide refunds or cancel any order except for the cases described in our Return Policy (i.e. Packt Publishing agrees to replace your printed book because it arrives damaged or material defect in book), Packt Publishing will not accept returns.
Return Policy:
We want you to be happy with your purchase from Packtpub.com. We will not hassle you with returning print books to us. If the print book you receive from us is incorrect, damaged, doesn't work or is unacceptably late, please contact Customer Relations Team on customercare@packt.com with the order number and issue details as explained below:
On the off chance your printed book arrives damaged, with book material defect, contact our Customer Relation Team on customercare@packt.com within 14 days of receipt of the book with appropriate evidence of damage and we will work with you to secure a replacement copy, if necessary. Please note that each printed book you order from us is individually made by Packt's professional book-printing partner which is on a print-on-demand basis.
Currently, no tax is charged on the purchase of any print book (subject to change based on the laws and regulations). A localized VAT fee is charged only to our European and UK customers on eBooks, Video and subscriptions that they buy. GST is charged to Indian customers for eBooks and video purchases.
You can pay with the following card types:
Shipping Details
USA:
'
Economy: Delivery to most addresses in the US within 10-15 business days
Premium: Trackable Delivery to most addresses in the US within 3-8 business days
UK:
Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable
Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands
EU:
Premium: Trackable delivery to most EU destinations within 4-9 business days.
Australia:
Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.
Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.
India:
Premium: Delivery to most Indian addresses within 5-6 business days
Rest of the World:
Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days
Asia:
Premium: Delivery to most Asian addresses within 5-9 business days
Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.
Unfortunately, due to several restrictions, we are unable to ship to the following countries:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4