How to set all the four axes with matplotlib

Viewed 469

https://i.stack.imgur.com/T5BbL.png

I want to draw a picture like this one, the top and right axes have different labels and ticks, anyone can help me?

3 Answers

To double both axes you have to use ax1.twinx().twiny().

Here an example:

# Create some mock data
x1 = np.arange(0, 10, 1)
y1 = [random.randint(1,5) for n in x1]
#print(x1,y1)

x2 = np.arange(0, 100, 10)
y2 = [random.randint(10,50) for n in x2]
#print(x2,y2)

fig, ax1 = plt.subplots()

ax1.set_xlabel('x1', color='red')
ax1.set_ylabel('y1', color='red')
ax1.plot(x1, y1, color='red')
ax1.tick_params(axis='both', labelcolor='red')

ax2 = ax1.twinx().twiny() #here is the trick!

ax2.set_xlabel('x2', color='blue')
ax2.set_ylabel('y2', color='blue')
ax2.plot(x2, y2, color='blue')
ax2.tick_params(axis='both', labelcolor='blue') #y2 does not get blue... can't yet figure out why

plt.show()

Here the result:

enter image description here

Since both datasets are completely independent, one would probably not use twin axes here. Instead, just use two different axes.

import numpy as np
import matplotlib.pyplot as plt

# Create some mock data
x1 = np.linspace(0,1,11)
y1 = np.random.rand(11)
x2 = np.linspace(1,0,101)
y2 = np.random.rand(101)*20+20


fig, ax1 = plt.subplots()
ax2 = fig.add_subplot(111, label="second axes")
ax2.set_facecolor("none")

ax1.set_xlabel('x1', color='red')
ax1.set_ylabel('y1', color='red')
ax1.plot(x1, y1, color='red')
ax1.tick_params(colors='red')

ax2.set_xlabel('x2', color='blue')
ax2.set_ylabel('y2', color='blue')
ax2.plot(x2, y2, color='blue')
ax2.xaxis.tick_top()
ax2.xaxis.set_label_position('top') 
ax2.yaxis.tick_right()
ax2.yaxis.set_label_position('right')
ax2.tick_params(colors='blue')

for which in ["top", "right"]:
    ax2.spines[which].set_color("blue")
    ax1.spines[which].set_visible(False)
for which in ["bottom", "left"]:
    ax1.spines[which].set_color("red")
    ax2.spines[which].set_visible(False)

plt.show()

enter image description here

You should use twinx and twiny functions, take a look at this link

Related