Ask Your Question
1

How can matplotlib graph axis be moved?

asked 2012-07-07 06:50:21 -0500

AndreWin gravatar image

updated 2012-07-07 21:50:34 -0500

Hello! I created test simple plot with matplotlib on www.sagenb.com using the following sintax:

import matplotlib.pyplot as plt
plt.plot([1, 3, 2, 4])
plt.savefig('1.png')

By default the axes are around the graph. But I want axes to be intersected at (0,0) point. I tried to find answer at matplotlib online documentation but not found.

Upd_1:

I would like to explain my problem more detail. Original graph has frame around it. Axes of this graph are located on the graph bordes. I want frame to be switched off and axis lines to be intersected at (0,0) point. Such graphs are drawn with Sage by default (I'm glad to upload some pictures, but my karma isn't enough to do it). Thanks to the help of fidelbc I typed the following code:

import matplotlib.pyplot as plt
plt.clf()
plt.plot([0, 5, 10, 15,20,25], [0, 5, 0, -5, 0, 5], linewidth=2, color='blue')
plt.box('off')
plt.grid(True)
plt.axhline(y=0, color='black')
plt.axvline(x=0, color='black')
plt.savefig('1.png')

New graph responds my idea at more extent and I want to draw arrows on axes and ticks with its label to be located near new horisontal axes. Please help me to set these parameters or just move graph axis. Thanks.

edit retag flag offensive close merge delete

Comments

I'll just point out that this really isn't a Sage question at all... though we're happy to be a place to share info!

kcrisman gravatar imagekcrisman ( 2012-07-07 16:12:15 -0500 )edit

2 answers

Sort by ยป oldest newest most voted
0

answered 2012-07-08 00:17:54 -0500

AndreWin gravatar image

updated 2012-07-08 00:38:06 -0500

I founded answer for my question! It can be founded at http://commons.wikimedia.org/wiki/Fil... . More results can be founded at http://commons.wikimedia.org/wiki/Cat... . The code is below:

import matplotlib.pyplot as plt
plt.clf()
fig=figure(figsize=(5,3))
ax = fig.add_subplot(111)
for direction in ["left","bottom"]:
    ax.spines[direction].set_position('zero')
    ax.spines[direction].set_smart_bounds(True)
for direction in ["right","top"]:
    ax.spines[direction].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.grid(True)
plt.plot([0, 5, 10, 15,20,25], [0, 5, 0, -5, 0, 5], linewidth=2, color='blue')
plt.savefig('1.png')

Thanks to anyone!

edit flag offensive delete link more
0

answered 2012-07-07 09:47:07 -0500

fidbc gravatar image

updated 2012-07-07 12:15:52 -0500

Hi! You can find more details about pyplot here: x0.no/5yi3

You can try adding two lines to your code to get the axis intersected at (0,0), like this.

import matplotlib.pyplot as plt
plt.plot([1, 3, 2, 4])
plt.axhline(y=0)
plt.axvline(x=0)
plt.savefig('1.png')

This produces: image description

The original plot was:

image description

Maybe creating the plots using functions from sage might be easier than using matplotlib.

Edit: Added images to illustrate difference and updated link.

edit flag offensive delete link more

Comments

Sorry, but your code don't solve this ploblem. I tried it and didn't see any difference from my graph.

AndreWin gravatar imageAndreWin ( 2012-07-07 09:55:58 -0500 )edit

Besides I don't know how to use your link (x0.no/5yi3).

AndreWin gravatar imageAndreWin ( 2012-07-07 09:59:05 -0500 )edit

Sorry, I might've missunderstood your question. I've added some images to contrast the differences. Is this what you wanted to produce?

fidbc gravatar imagefidbc ( 2012-07-07 12:18:42 -0500 )edit

Fidelbc, thank you for your help! Your link helped me at some extent. I realized my question wasn't detailed and I updated my question.

AndreWin gravatar imageAndreWin ( 2012-07-07 21:52:50 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2012-07-07 06:50:21 -0500

Seen: 5,818 times

Last updated: Jul 08 '12