Him
Him

Reputation: 5549

matplotlib scale axes according to arbitrary function

I am plotting a 5th degree polynomial... for simplicity, lets just go with y=(x-3)(x-2)x(x+2)(x+3). On reasonable intervals for x, say from -5 to 5, the graph isn't very informative because the function grows very quickly outside of the "interesting" range, about -3 to 3:

enter image description here

A symlog scale is somewhat better, but now I'm looking at the log of a 5th degree polynomial, which is a bit hard for me to interpret:

enter image description here

Ideally, I could plot this on a polynomial scale. Since I know I have a 5th degree polynomial, then a 5th root scale would be able to fit all of my data, and the graph should behave linearly out near the edges. Is it possible to scale my axes with an arbitrary function?

Upvotes: 1

Views: 1724

Answers (1)

sehan2
sehan2

Reputation: 1835

I adjusted this example as follows:

import numpy as np
import matplotlib.pyplot as plt

y = np.random.normal(loc=0.5, scale=0.4, size=1000)
x = np.arange(len(y))

fig, ax = plt.subplots(figsize=(6, 8), constrained_layout=True)

t = np.arange(1, 170.0, 0.1)
s = t / 2.

ax.plot(t, s, '-', lw=2)
ax.set_yscale('function', functions=(lambda x: x**5, lambda x: x**(0.2)))
ax.grid(True)
ax.set_ylim(0,5)
plt.show()

Upvotes: 2

Related Questions