Ask Your Question
2

How can matplotlib graph axis be moved?

asked 12 years ago

AndreWin gravatar image

updated 12 years ago

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.

Preview: (hide)

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 ( 12 years ago )

2 Answers

Sort by » oldest newest most voted
0

answered 12 years ago

fidbc gravatar image

updated 12 years ago

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.

Preview: (hide)
link

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 ( 12 years ago )

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

AndreWin gravatar imageAndreWin ( 12 years ago )

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 ( 12 years ago )

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 ( 12 years ago )
0

answered 12 years ago

AndreWin gravatar image

updated 12 years ago

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!

Preview: (hide)
link

Your Answer

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

Add Answer

Question Tools

2 followers

Stats

Asked: 12 years ago

Seen: 19,193 times

Last updated: Jul 08 '12