Mpld3 plugin for installation

I'm trying to create a mpld3 plugin, so when I hover over the scatter plot circle it shows the sin line, but with the x-axis starting at the beginning of the line and ending where the line ends.

What method should I call for this?

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import mpld3
from mpld3 import plugins, utils


class LinkedView(plugins.PluginBase):
    """A simple plugin showing how multiple axes can be linked"""

    JAVASCRIPT = """
    mpld3.register_plugin("linkedview", LinkedViewPlugin);
    LinkedViewPlugin.prototype = Object.create(mpld3.Plugin.prototype);
    LinkedViewPlugin.prototype.constructor = LinkedViewPlugin;
    LinkedViewPlugin.prototype.requiredProps = ["idpts", "idline", "data"];
    LinkedViewPlugin.prototype.defaultProps = {}
    function LinkedViewPlugin(fig, props){, fig, props);

    LinkedViewPlugin.prototype.draw = function(){
      var pts = mpld3.get_element(this.props.idpts);
      var line = mpld3.get_element(this.props.idline);
      var data =;

      pts.elements().on("mouseover", function(d, i){

        var begin = d[0]-2;
        var end = d[0]+2;
        console.log("Show from " + begin + " to " + end);
        var truncated = Array();
        for (var row = 0; row < data[i].length ; ++row){

            var x = data[i][row][0];
            if ( begin <= x && x <= end){
        } = truncated;
            .attr("d", line.datafunc(


    def __init__(self, points, line, linedata):
        if isinstance(points, matplotlib.lines.Line2D):
            suffix = "pts"
            suffix = None

        self.dict_ = {"type": "linkedview",
                      "idpts": utils.get_id(points, suffix),
                      "idline": utils.get_id(line),
                      "data": linedata}

fig, ax = plt.subplots(2)

# scatter periods and amplitudes
P =np.random.random(size=20)*10
A = np.random.random(size=20)
x = np.linspace(0, 10, 100)
data = np.array([[x, Ai * np.sin(x / (Pi/10))]

for (Ai, Pi) in zip(A, P)])
points = ax[1].scatter(P, A, c=(P/10 + A),s=200, alpha=0.5)

# create the line object
lines = ax[0].plot(x, 0 * x, '-w', lw=3, alpha=0.5)
ax[0].set_ylim(-1, 1)

ax[0].set_title("Hover over points to see lines")

# transpose line data and add plugin
linedata = data.transpose(0, 2, 1).tolist()
plugins.connect(fig, LinkedView(points, lines[0], linedata))




source to share

1 answer

There mpld3.js

is a javascript function called set_axlim

. In your javascript code, you need to call

with the constraints you want to set. Here is an example of where the method is called.



All Articles