开发者

In matplotlib, how do you display an axis on both sides of the figure?

开发者 https://www.devze.com 2023-03-26 19:46 出处:网络
I wa开发者_如何学编程nt to draw a plot with matplotlib with axis on both sides of the plot, similar to this plot (the color is irrelevant to this question):

I wa开发者_如何学编程nt to draw a plot with matplotlib with axis on both sides of the plot, similar to this plot (the color is irrelevant to this question):

In matplotlib, how do you display an axis on both sides of the figure?

How can I do this with matplotlib?

Note: contrary to what is shown in the example graph, I want the two axis to be exactly the same, and want to show only one graph. Adding the two axis is only to make reading the graph easier.


You can use tick_params() (this I did in Jupyter notebook):

import matplotlib.pyplot as plt

bar(range(10), range(10))
tick_params(labeltop=True, labelright=True)

Generates this image:

In matplotlib, how do you display an axis on both sides of the figure?

UPD: added a simple example for subplots. You should use tick_params() with axis object.

This code sets to display only top labels for the top subplot and bottom labels for the bottom subplot (with corresponding ticks):

import matplotlib.pyplot as plt

f, axarr = plt.subplots(2)

axarr[0].bar(range(10), range(10))
axarr[0].tick_params(labelbottom=False, labeltop=True, labelleft=False, labelright=False,
                     bottom=False, top=True, left=False, right=False)

axarr[1].bar(range(10), range(10, 0, -1))
axarr[1].tick_params(labelbottom=True, labeltop=False, labelleft=False, labelright=False,
                     bottom=True, top=False, left=False, right=False)

Looks like this:

In matplotlib, how do you display an axis on both sides of the figure?


There are a couple of relevant examples in the online documentation:

  • Two Scales (seems to do exactly what you're asking for)
  • Dual Fahrenheit and Celsius


I've done this previously using the following:

# Create figure and initial axis    
fig, ax0 = plt.subplots()
# Create a duplicate of the original xaxis, giving you an additional axis object
ax1 = ax.twinx()
# Set the limits of the new axis from the original axis limits
ax1.set_ylim(ax0.get_ylim())

This will exactly duplicate the original y-axis.

Eg:

ax = plt.gca()

plt.bar(range(3), range(1, 4))
plt.axhline(1.75, color="gray", ls=":")

twin_ax = ax.twinx()
twin_ax.set_yticks([1.75])
twin_ax.set_ylim(ax.get_ylim())

In matplotlib, how do you display an axis on both sides of the figure?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号