can anybody help me to draw this minimal example of an xy axis? I couldn't find anything similar on the forum.

The axis should be black but the grid behind it a shade o gray, dashed. It would be great if the axis were a little bit thicker than the grid also.


  • 5
    Have a look at chapter 2 of the TikZ manual (first tutorial). – Pier Paolo Jan 13 '15 at 11:23
  • 1
    A minimal xy axis is great and useful, but maybe next month you need something more specific. ;-) So think of that when you choose one of the answers. – Arne Timperman Jan 13 '15 at 15:20
  • 1
    I'm not sure what you meant @Arne, but thank you for the contribution. Cheers. – bru1987 Jan 13 '15 at 16:29
  • 1
    Maybe, later you will add functions, or willing to controle the numbers on the x or y axe, or make it discontinue ... (for good practice of the forum just click the up arrow instead of typing thanks ;-) It is the way it goes here. – Arne Timperman Jan 13 '15 at 17:02

10 Answers 10


with TiKZ:

\draw[help lines, color=gray!30, dashed] (-4.9,-4.9) grid (4.9,4.9);
\draw[->,ultra thick] (-5,0)--(5,0) node[right]{$x$};
\draw[->,ultra thick] (0,-5)--(0,5) node[above]{$y$};


Minimal Axis

| improve this answer | |
  • That's great Ignasi. I would do a slight modification, to do the dashed lines. Thank you! – bru1987 Jan 13 '15 at 16:20
  • @bru1987 Glad to help you. Add dashed after help lines and the grid will be built with dashed lines. – Ignasi Jan 13 '15 at 16:26
  • Thank you @Ignasi, I just did that, along with making it a lighter black. I hope you like the modification. Thank you. – bru1987 Jan 13 '15 at 16:28

Why pgfplots is left out?

               minor tick num=1,axis lines = middle,xlabel=$x$,ylabel=$y$,label style =
               {at={(ticklabel cs:1.1)}}]

enter image description here

| improve this answer | |
  • 1
    +1 Honestly, I didn't think of this possibility. But now that we are rolling, you could mention of adding axis equal=true to have the same scale in both axes. – Pier Paolo Jan 13 '15 at 19:47

And here is a fairly generic Metapost approach to making a grid. Follow the link for an introduction to Metapost and how to use this code in a LaTeX document.

enter image description here

prologues := 3;
outputtemplate := "%j%c.eps";


u = 1cm;
ymax = xmax = 4.75;
xmin = ymin = -4.75;

path xx, yy;
xx = ((xmin,0) -- (xmax,0)) scaled u;
yy = ((0,ymin) -- (0,ymax)) scaled u;

drawoptions(dashed evenly scaled .5 withcolor .7 white);
for i = ceiling ymin upto floor ymax: draw xx shifted (0,i*u); endfor
for i = ceiling xmin upto floor xmax: draw yy shifted (i*u,0); endfor

drawoptions(withpen pencircle scaled .7);
xx := xx scaled 1.05;
yy := yy scaled 1.05;
drawarrow xx;
drawarrow yy;

label.rt (btex $x$ etex, point infinity of xx);
label.top(btex $y$ etex, point infinity of yy);

| improve this answer | |
  • Having never worked with Metapost myself, I may ask a (maybe silly) question: how do I incorporate this code in my LaTeX document? – Jan Dec 27 '16 at 19:24
  • Not silly at all - if you follow the link at the top of my answer, that should get you going. – Thruston Dec 27 '16 at 19:28

No graphics question is complete without a picture mode solution:



enter image description here

| improve this answer | |
  • What a pitty, that I only can add +1 to your counter. You are so right :-) This would also be my answer. – Jan Dec 27 '16 at 19:25

A stack was too much to resist, so onto the bandwagon I jump.

% From morsburg at http://tex.stackexchange.com/questions/12537/
% how-can-i-make-a-horizontal-dashed-line/12553#12553
\def\solidfill{\cleaders\hbox to .1cm{\rule{.1cm}{1pt}}\hfill}
\def\dashfill{\cleaders\hbox to .2cm{\rule{.05cm}{.4pt}}\hfill}
\newcommand\dashline[1]{\hbox to #1{\dashfill\hfil}}
\newcommand\solidline[1]{\hbox to #1{\solidfill\hfil}}
\savestack\partA{\Longstack{\DL\\ \DL\\ \DL\\ \DL\\ \SL\\ \DL\\ \DL\\ \DL\\ \DL}}

enter image description here

| improve this answer | |

A PSTricks solution:




% parameter
\def\size{5} % natural number

\begin{pspicture}(-\size,-\size)(\size.57,\size.62)% found manually
  \multido{\iA = -\size+1}{\numexpr2*\size+1}{%
    \multido{\iB = -\size+1}{\numexpr2*\size+1}{%
    \psset{linewidth = 0.5\pslinewidth, linestyle = dashed, linecolor = gray!50}
  \psaxes[labels = none]{->}(0,0)(-\size,-\size)(\size.21,\size.21)[$x$,0][$y$,90]



All you have to do is choose the value of \size and the drawing will be adjusted accordingly.

I've drawn the grid manually since pstricks-add's function for this makes it look wierd, I think.

| improve this answer | |
  • Hi Svend, that's a great looking image. How could I remove the number labels on it, keeping the spacing between them? Thank you! – bru1987 Jan 13 '15 at 11:37
  • @bru1987 See updated answer. – Svend Tveskæg Jan 13 '15 at 11:59
  • That's a great solution @Svend, thank you for your contribution. – bru1987 Jan 13 '15 at 16:12

Just a simple way, easy to adapt, (but the lines or not dashed).

\tkzGrid[sub,color=gray, subxstep=.5,subystep=.5]
\tkzAxeXY[very thick]

enter image description here

| improve this answer | |
  • 1
    tkz-euclide I think is underappreciated. it is always my go to tikz-based package for quick plots. – hpesoj626 Sep 10 '19 at 2:49

My own try with MetaPost, which is integrated into a LuaLaTeX program. I've picked up some macros I had already created for my own use (and modified some of them slightly).

  \everymplib{verbatimtex \leavevmode etex;

    def hgrid(expr ymin, ymax, ystep, u, v)(text mycolor) =
      for j = ceiling(ymin) step ystep until floor(ymax):
        draw ((xmin, j) -- (xmax, j)) xscaled u yscaled v withcolor mycolor;

    def vgrid(expr xmin, xmax, xstep, u, v)(text mycolor) =
      for i = ceiling(xmin) step xstep until floor(xmax):
        draw ((i, ymin) -- (i, ymax)) xscaled u yscaled v withcolor mycolor;

    vardef xaxis(expr xmin, xmax, u) = ((xmin, 0) -- (xmax, 0)) scaled u enddef;
    vardef yaxis(expr ymin, ymax, v) = ((0, ymin) -- (0, ymax)) scaled v enddef;


    u := 1cm; v := 1.25cm;
    xmin = -4.9; xmax = 4.9; ymin = -4.5; ymax = 4.5;
    vgrid(xmin, xmax, 1, u, v, 0.8white dashed evenly); 
    hgrid(ymin, ymax, 1, u, v, 0.8white dashed evenly);
    pickup pencircle scaled 1bp;
    drawarrow xaxis(xmin, xmax, u); drawarrow yaxis(ymin, ymax, v);
    label.bot(btex $x$ etex, (xmax*u, 0)); label.lft(btex $y$ etex, (0, ymax*v));

Result as expected:

enter image description here

| improve this answer | |

This time with the mfpic package, which is a (La)TeX interface to MetaPost or Metafont (here used MetaPost). Note that this program is shorter than my correponding MetaPost coding, since mfpic already has its own drawing macros.

In exchange it requires several compilations, à la bibTeX: first compile your LaTeX file, say grid.tex, with LaTeX, then the created grid.mp file with MetaPost, and then again grid.tex with LaTeX. As a regular mfpic user I use a script which automatizes this.

    \begin{mfpfor}{i = ceiling(\xmin) step 1 until floor(\xmax)}
      \dashed\lines{(i, \ymin), (i, \ymax)}
    \begin{mfpfor}{j = ceiling(\ymin) step 1 until floor(\ymax)}
       \dashed\lines{(\xmin, j), (\xmax, j)}
    \tlabels{[tc](\xmax, 0){$x$} [cr](0, \ymax){$y$}}


enter image description here

| improve this answer | |
\psaxes[labels=none,ticklinestyle=dashed,ticksize=-5 5,

enter image description here

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.