Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I draw axis lines inside a plot in Matplotlib?

When I plot data using Matplotlib, the axes are always plotted by default as a box framing the plot. Let's say I am plotting data within axis limits -2 < x < 2 and -2 < y < 2, but I would like to draw axis lines inside this plot area through the origin, preferably with ticks and tick labels along these axis lines - not along the outer frame.

like image 759
Thomas Arildsen Avatar asked Sep 16 '15 10:09

Thomas Arildsen


People also ask

How do I plot multiple lines in Matplotlib?

Import matplotlib. To create subplot, use subplots() function. Next, define data coordinates using range() function to get multiple lines with different lengths. To plot a line chart, use the plot() function.


2 Answers

This is well documented in the spines example (old link) / spine placement demo (new link).

You are going to turn off the right and top spines (e.g. spines['right'].set_color('none')), and move the left and bottom spines to the zero position (e.g. spines['left'].set_position('zero')).

import numpy as np
import matplotlib.pyplot as plt


fig = plt.figure()
x = np.linspace(-np.pi, np.pi, 100)
y = 2*np.sin(x)

ax = fig.add_subplot(111)
ax.set_title('zeroed spines')
ax.plot(x, y)
ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
ax.spines['top'].set_color('none')

# remove the ticks from the top and right edges
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')

enter image description here

like image 111
tmdavison Avatar answered Oct 18 '22 22:10

tmdavison


I can at least give a half-complete answer. Yes, you can easily draw the axis lines. It is as simple as

plt.axvline(0)
plt.axhline(0)

The original axes will remain, but can be turned off with plt.axis('off'). It will also not give you any tick marks.

like image 43
Hannes Ovrén Avatar answered Oct 18 '22 20:10

Hannes Ovrén