Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

secondary Y axis position matplotlib

Tags:

matplotlib

I need to change the secondary Y axis position on a matplotlib plot.

It's like a subplot inside the same plot.

In the image below, my secondary Y axis starts at the same position as first y axis. I need that the secondary Y axis starts about at the "18" position of the first Y axis, with a smaller scale (red line).

enter image description here

like image 515
fandreacci Avatar asked Sep 11 '25 02:09

fandreacci


1 Answers

If I understand the question, you want a twinx axis, as @kikocorreoso says, but you also want to compress it, so it only takes up the upper portion of the y axis.

You can do this by just setting the ylim larger than you need it, and explicitly setting the yticks. Here's an example with some random data

import matplotlib.pyplot as plt
import numpy as np

data = [np.random.normal(np.random.randint(0,5),4,25) for _ in range(25)] # some random data

fig=plt.figure()
ax1=fig.add_subplot(111)
ax2=ax1.twinx()

ax1.set_ylim(-5,25)
ax2.set_ylim(0,14)
ax2.set_yticks([10,12,14]) # ticks below 10 don't show up

ax1.boxplot(data)
ax2.plot(np.linspace(0,26,50),12.+2.*np.sin(np.linspace(0,2.*np.pi,50))) # just a random line

plt.show()

enter image description here

like image 134
tmdavison Avatar answered Sep 13 '25 08:09

tmdavison