Plotly: How to set the range of the y axis?

93,511

Solution 1

Update for newer versions

When setting up a figure you can use plotly's magic underscore notation and specify layout_yaxis_range=[<from_value>, <to_value>] like this:

fig = go.Figure(data=go.Scatter(x=x, y=y, mode='lines'), layout_yaxis_range=[-4,4])

Or if you've already got a figure named fig, you can use:

fig.update_layout(yaxis_range=[-4,4])

And:

fig.update(layout_yaxis_range = [-4,4])

Or:

fig.update_yaxes(range = [-4,4])

Figure:

enter image description here

Complete code:

# imports
import pandas as pd
import plotly.graph_objs as go
import numpy as np

# data
np.random.seed(4)
x = np.linspace(0, 1, 50)
y = np.cumsum(np.random.randn(50))

# plotly line chart
fig = go.Figure(data=go.Scatter(x=x, y=y, mode='lines'), layout_yaxis_range=[-4,4])
               
fig.update_layout(yaxis_range=[-4,4])
fig.show()

Original answer using plotly.offline, iplot and no magic underscore notation:

When setting up a figure, use:

layout = go.Layout(yaxis=dict(range=[fromValue, toValue])

Or if you've already got a figure named fig, you can use:

fig.update_layout(yaxis=dict(range=[fromValue,toValue]))

Plot:

enter image description here

Complete code for Jupyter Notebook:

# imports
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import pandas as pd
import plotly.graph_objs as go
import numpy as np

# setup
init_notebook_mode(connected=True)

# data
np.random.seed(4)
x = np.linspace(0, 1, 50)
y = np.cumsum(np.random.randn(50))

# line
trace = go.Scatter(
    x=x,
    y=y,
)

# layout
layout = go.Layout(yaxis=dict(range=[-4,4])
)

# Plot
fig = go.Figure(data=[trace], layout=layout)
iplot(fig)

Some important details:

With this setup, you can easily add an y axis title like this:

# layout
layout = go.Layout(yaxis=dict(range=[-4,4]), title='y Axis')
)

It's a little more tricky if you'd like to format that title further. I find it easiest to actually add another element with title = go.layout.yaxis.Title(text='y Axis', font=dict(size=14, color='#7f7f7f'). As long as you do it the right way, you should not experience the situation in your comment above:

Thanks. I tried it. But then I have 2 definitions of yaxis in the Layout: yaxis=dict(range=[0, 10]) and yaxis=go.layout.YAxis. Therefore an error appears.

Take a look at this:

Plot:

enter image description here

Complete code with y-axis text formatting:

# imports
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import pandas as pd
import plotly.graph_objs as go
import numpy as np

# setup
init_notebook_mode(connected=True)

# data
np.random.seed(4)
x = np.linspace(0, 1, 50)
y = np.cumsum(np.random.randn(50))

# line
trace = go.Scatter(
    x=x,
    y=y,
)

# layout
layout = go.Layout(
    yaxis=dict(range=[-4,4],
    title = go.layout.yaxis.Title(text='y Axis', font=dict(size=14, color='#7f7f7f')))
)

# Plot
fig = go.Figure(data=[trace], layout=layout)
iplot(fig)

Solution 2

If I understand you right you want to limit the range of the y-axis itself. You can pass a dict in the keyword argument yaxis. It could be something like go.Layout(yaxis=dict(range=[0, 10])) I hope this helps you.

Share:
93,511
Tatik
Author by

Tatik

Updated on July 09, 2022

Comments

  • Tatik
    Tatik almost 2 years

    I have the following code to create the line plot with Plotly. How can I set the range of Y axis to always have it in [0; 10]?

    layout = go.Layout(
            title=go.layout.Title(
                text="Test",
                xref='paper',
                x=0
            ),
            xaxis=go.layout.XAxis(
                tickmode='linear',
                tickfont=dict(
                    size=10
                ),
                title=go.layout.xaxis.Title(
                    font=dict(
                        size=14,
                        color='#7f7f7f'
                    )
                )
            ),
            yaxis=go.layout.YAxis(
                title=go.layout.yaxis.Title(
                    text=y,
                    font=dict(
                        size=14,
                        color='#7f7f7f'
                    )
                )
            )
        )
    
        data = [go.Scatter(x=x1, y=y1)]
    
  • Strijder
    Strijder about 5 years
    For more documentation on this topic see: plot.ly/python/axes/#setting-the-range-of-axes-manually
  • Daniel Himmelstein
    Daniel Himmelstein over 3 years
    The update_layout call can be simplified with plotly.py's magic underscore notation: fig.update_layout(yaxis_range=[fromValue, toValue])