24

Using matplotlib, it seems the only time to set the sharex or sharey axis parameters are during sub_plot creation (add_subplot(), subplot(), subplots()). For an axes class there are methods for getting axis sharing (get_shared_x_axes(), get_shared_y_axes()), but no corresponding methods for setting sharing. Maybe this is an API oversight, or perhaps it did not fit architecturally.

Is there a way to change the shared axis parameter?

For those that ask why: I'm using a matrix of plots dynamically, and can control this using view limits, but it just seems like there could be an easier way, and turning sharing on/off and using autoscale would be it.

Thanks.

CNK
  • 1,053
  • 2
  • 11
  • 17

3 Answers3

25

Just to mention that a method for sharing axes after their creation does exist by now. For two axes ax1 and ax2 you can use

ax1.get_shared_x_axes().join(ax1, ax2)

See How share x axis of two subplots after they are created?.

Community
  • 1
  • 1
ImportanceOfBeingErnest
  • 321,279
  • 53
  • 665
  • 712
7

As of v3.3 there exist the new Axes.sharex, Axes.sharey methods:

ax1.sharex(ax2)
ax1.sharey(ax3)
iacob
  • 20,084
  • 6
  • 92
  • 119
5

The answer is that the way shared axes are set up is to share some of the internal state of the two axes. It is a tad tricky to get right and the code to do it on-the-fly (both linking and unlinking) doesn't exist in the library yet.

See this PR for work on-going work on un-linking axes. Help testing and developing this feature would be appreciated.

tacaswell
  • 84,579
  • 22
  • 210
  • 199