Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3803060
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 19, 20262026-05-19T14:18:16+00:00 2026-05-19T14:18:16+00:00

I need help customizing my plots. I want the canvas to look approximately like

  • 0

I need help customizing my plots. I want the canvas to look approximately like the default 2D-graph template from MacOS’s Grapher (see screenshot).

To clarify – I need

  • a centered axis
  • a grid (preferably with an additional darker grid every 1 unit)
  • axislines with arrows
  • only one zero at the origo (when I tried my best, I got one zero from the x-axis and a second one from the y-axis.), slightly moved to the left so it’s not behind the y-axis

I really appreciate your help!

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-19T14:18:17+00:00Added an answer on May 19, 2026 at 2:18 pm

    This definitely falls under the category of more trouble than it’s worth with matplotlib, but here you go. Also, for the basic case, have a look at the centering spines demo in the documentation.

    You can do this in a few different ways, but for the best visual effect, consider something along the lines of the following. It’s far from perfect, but it’s reasonably flexible:

    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import matplotlib.patheffects
    import numpy as np
    
    def center_spines(ax=None, centerx=0, centery=0):
        """Centers the axis spines at <centerx, centery> on the axis "ax", and
        places arrows at the end of the axis spines."""
        if ax is None:
            ax = plt.gca()
    
        # Set the axis's spines to be centered at the given point
        # (Setting all 4 spines so that the tick marks go in both directions)
        ax.spines['left'].set_position(('data', centerx))
        ax.spines['bottom'].set_position(('data', centery))
        ax.spines['right'].set_position(('data', centerx - 1))
        ax.spines['top'].set_position(('data', centery - 1))
    
        # Draw an arrow at the end of the spines
        ax.spines['left'].set_path_effects([EndArrow()])
        ax.spines['bottom'].set_path_effects([EndArrow()])
    
        # Hide the line (but not ticks) for "extra" spines
        for side in ['right', 'top']:
            ax.spines[side].set_color('none')
    
        # On both the x and y axes...
        for axis, center in zip([ax.xaxis, ax.yaxis], [centerx, centery]):
            # Turn on minor and major gridlines and ticks
            axis.set_ticks_position('both')
            axis.grid(True, 'major', ls='solid', lw=0.5, color='gray')
            axis.grid(True, 'minor', ls='solid', lw=0.1, color='gray')
            axis.set_minor_locator(mpl.ticker.AutoMinorLocator())
    
            # Hide the ticklabels at <centerx, centery>
            formatter = CenteredFormatter()
            formatter.center = center
            axis.set_major_formatter(formatter)
    
        # Add offset ticklabels at <centerx, centery> using annotation
        # (Should probably make these update when the plot is redrawn...)
        xlabel, ylabel = map(formatter.format_data, [centerx, centery])
        ax.annotate('(%s, %s)' % (xlabel, ylabel), (centerx, centery),
                xytext=(-4, -4), textcoords='offset points',
                ha='right', va='top')
    
    # Note: I'm implementing the arrows as a path effect rather than a custom 
    #       Spines class. In the long run, a custom Spines class would be a better
    #       way to go. One of the side effects of this is that the arrows aren't
    #       reversed when the axes are reversed!
    
    class EndArrow(mpl.patheffects._Base):
        """A matplotlib patheffect to add arrows at the end of a path."""
        def __init__(self, headwidth=5, headheight=5, facecolor=(0,0,0), **kwargs):
            super(mpl.patheffects._Base, self).__init__()
            self.width, self.height = headwidth, headheight
            self._gc_args = kwargs
            self.facecolor = facecolor
    
            self.trans = mpl.transforms.Affine2D()
    
            self.arrowpath = mpl.path.Path(
                    np.array([[-0.5, -0.2], [0.0, 0.0], [0.5, -0.2], 
                              [0.0, 1.0], [-0.5, -0.2]]),
                    np.array([1, 2, 2, 2, 79]))
    
        def draw_path(self, renderer, gc, tpath, affine, rgbFace):
            scalex = renderer.points_to_pixels(self.width)
            scaley = renderer.points_to_pixels(self.height)
    
            x0, y0 = tpath.vertices[-1]
            dx, dy = tpath.vertices[-1] - tpath.vertices[-2]
            azi =  np.arctan2(dy, dx) - np.pi / 2.0 
            trans = affine + self.trans.clear(
                    ).scale(scalex, scaley
                    ).rotate(azi
                    ).translate(x0, y0)
    
            gc0 = renderer.new_gc()
            gc0.copy_properties(gc)
            self._update_gc(gc0, self._gc_args)
    
            if self.facecolor is None:
                color = rgbFace
            else:
                color = self.facecolor
    
            renderer.draw_path(gc0, self.arrowpath, trans, color)
            renderer.draw_path(gc, tpath, affine, rgbFace)
            gc0.restore()
    
    class CenteredFormatter(mpl.ticker.ScalarFormatter):
        """Acts exactly like the default Scalar Formatter, but yields an empty
        label for ticks at "center"."""
        center = 0
        def __call__(self, value, pos=None):
            if value == self.center:
                return ''
            else:
                return mpl.ticker.ScalarFormatter.__call__(self, value, pos)
    

    I deliberately didn’t set the x and y major tick intervals to 1, but that’s easy to do. ax.xaxis.set_major_locator(MultipleLocator(1))

    Now you can just call center_spines to do something like this:

    x = np.arange(-5, 5)
    y = x
    
    line, = plt.plot(x, y)
    center_spines()
    plt.axis('equal')
    plt.show()
    

    alt text

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Need help writing a script downloads data from google insight using c# this is
need help in error in database pivot. i have table tamed table_score like below:
Need help. I have Graph API code that uses an auth token with offline
I need help I'm using EJS javasript template to write a code snippet two
need help to read xml file. i have one xml file which i want
Need help with PHP/MySql. Need to select all the records from 'today'. My table
Need help with my simple PHP menu. I'd like to have something like that:
Need help to convert code from asp control to input type to fetch file
Need help with deleting call log from multi numbers, using the following code i
Need help transfer sql to sequel: SQL: SELECT table_t.curr_id FROM table_t INNER JOIN table_c

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.