简体   繁体   中英

Set axis limits in matplotlib but autoscale within them

Is it possible to set the max and min values of an axis in matplotlib, but then autoscale when the values are much smaller than these limits?

For example, I want a graph of percentage change to be limited between -100 and 100, but many of my plots will be between, say, -5 and 5. When I use ax.set_ylim(-100, 100) , this graph is very unclear.

I suppose I could use something like ax.set_ylim(max((-100, data-n)), min((100, data+n))) , but is there a more built in way to achieve this?

If you want to drop extreme outliers you could use the numpy quantile function to find say the first 0.001 % of the data and last 99.999 %.

near_min = np.quantile(in_data, 0.0001)
near_max = np.quantile(in_data, 0.9999)
ax.set_ylim(near_min, near_max)

You will need to adjust the quantile depending on the volume of data you drop. You might want to include some test of whether the difference between near_min and true min is significant?

As ImportanceOfBeingErnest pointed out , there is no support for this feature. In the end I just used my original idea, but scaled it by the value of the max and min to give the impression of autoscale.

ax.set_ylim(max((-100, data_min+data_min*0.1)), min((100, data_max+data_max*0.1)))

Where for my case it is true that

data_min <= 0, data_max >= 0

Why not just set axis limits based on range of the data each time plot is updated?

ax.set_ylim(min(data), max(data))

Or check if range of data is below some threshold, and then set axis limits.

if min(abs(data)) < thresh:
    ax.set_ylim(min(data), max(data))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM