Diogo
Diogo

Reputation: 733

How to Make a secondary vertical axis, with labels on the left, using matplotlib?

I was trying to make a graph with two secondary vertical axis (y-axis), with python matplotlib.

I was using twinx() method, where one of the two new axis is with the default behavior (labels on the right) and the other with labels on the left, like the example of tan(x) on the figure bellow (created in an specific software).

Is there an easy way to do that? I'm not restricted to use the twinx() method, if there is another way

enter image description here

Upvotes: 1

Views: 1243

Answers (1)

JohanC
JohanC

Reputation: 80329

Here is a way to add two secondary y-axis, one towards the inside:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(.5, 10, 1000)
y1 = np.cos(x)
y2 = np.sin(2 * x)
y3 = np.clip(np.tan(x * .6), -75, 75)

fig, ax1 = plt.subplots()

color = 'dodgerblue'
ax1.set_ylabel('$cos(x)$', color=color)
ax1.plot(x, y1, color=color)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()
color = 'limegreen'
ax2.set_ylabel('$sin(2 x)$', color=color)
ax2.plot(x, y2, color=color)
ax2.tick_params(axis="y", labelcolor=color)

ax3 = ax1.twinx()
color = 'crimson'
ax3.set_ylabel('$tan(.6 x)$', color=color, labelpad=-40)
ax3.plot(x, y3, color=color)
ax3.tick_params(axis="y", labelcolor=color, direction="in", pad=-5)
plt.setp(ax3.get_yticklabels(), ha="right")

ax1.set_xlim(0, 12)

fig.tight_layout()
plt.show()

resulting plot

Upvotes: 3

Related Questions