Simen Russnes
Simen Russnes

Reputation: 2260

Plotly React keep zoom and rotation between re-rendering

I'm using the React version of plot.ly to render a 3D scatter plot, but every time I re-render my component, the plot gets reset to its default configuration.

How can I prevent this, and keep the zoom/rotation configuration?

Below is a minimal code example. To re-iterate, how can I save the zoom and rotation, and how can I set it on the plot?

setPlotData() {
    const points = {
        1: {x: 1, y: 1, z: 1},
        2: {x: 2, y: 1, z: 1},
        3: {x: 3, y: 2, z: 1}
    }
    const x=[], y=[], z=[]
    Object.keys(points).forEach((key, index) => {
        x.push(points[key].x); y.push(points[key].y); z.push(points[key].z)
    })
    const data1 = {
            x: x, y: y, z: z,
            mode: "markers",
            marker: {
            color: "rgb(16, 52, 166)",
            size: 4,
            symbol: "circle",
            opacity: 1
            },
            type: "scatter3d"
    }
    this.setState({
        scatterPlotData: [data1]
    })
}

render() {
    return(
        <Plot 
            data={this.state.scatterPlotData}
            layout={{
                autosize: true,
                l: 0, r: 0, b: 0, t: 0, pad: 0,
                showlegend: false,
                margin:{l:0,r:0,b:0,t:0}
            }}
            style={{ width: '100%', height: '100%' }}
        />
    )
}

Upvotes: 5

Views: 1811

Answers (1)

siddhartha kasaraneni
siddhartha kasaraneni

Reputation: 688

Update the layout to add uirevision parameter

layout={{
     autosize: true,
     l: 0, r: 0, b: 0, t: 0, pad: 0,
     showlegend: false,
     margin:{l:0,r:0,b:0,t:0},
     xaxis: {
        uirevision: 'time',
     },
     yaxis: {
        uirevision: 'time',
     },

}}

you can change the uirevision: "time" to whatever x,y axis parameters you use

Upvotes: 5

Related Questions