1

I'm pretty desperate with a problem I have right now. I'm trying to create a lollipop plot that has different categories on the y-axis and occurrences on the x-axis. According to the below code. Note that I use https://github.com/nschloe/matplotlib2tikz to convert matplotlib plots to tikz/pgfplot. Now I have the problem that the text is too long for some categories on the Y-tick labels and must therefore be breaked, because elswise the plot would reach out of the document (The width of the plot is only altering the plot itself but not the text size). I use the y tick label style "text width" to break the lines here. Since I have about 16 of these diagrams, I want them to be about 5 cm high, as they would take up too much space in the document if they were higher. As you can see, when you wrap a line, the distance between the new line is greater than the distance between the tick label to the upper and lower tick labels.

Now to my question: Is there a way that I can reduce the distance between two lines of a tick label?

  \documentclass[10pt,a4paper]{article}
    \usepackage[utf8]{inputenc}
    \usepackage{amsmath}
    \usepackage{amsfonts}
    \usepackage{amssymb}
    \usepackage{pgfplots}
    \begin{document}


    \begin{tikzpicture}
    \definecolor{color0}{rgb}{0.529411764705882,0.807843137254902,0.92156862745098}
    \definecolor{color1}{rgb}{0.12156862745098,0.466666666666667,0.705882352941177}
    \begin{axis}[
    height=5cm,
    tick align=outside,
    tick pos=left,
    width=\textwidth,
    x grid style={white!69.01960784313725!black},
    xmajorgrids,
    xmin=-0.4, xmax=8.4,
    y grid style={white!69.01960784313725!black},
    y tick label style ={anchor=east, text width={5cm}},
    ymin=-0.45, ymax=5.45,
    ytick={0,1,2,3,4,5},
    yticklabels={This is some long text,This is some quite long text,This is some very long text that might break,This is some long text,This is some long text,Short text}
    ]
    \path [draw=color0, semithick] (axis cs:0,0)
    --(axis cs:8,0);

    \path [draw=color0, semithick] (axis cs:0,1)
    --(axis cs:6,1);

    \path [draw=color0, semithick] (axis cs:0,2)
    --(axis cs:3,2);

    \path [draw=color0, semithick] (axis cs:0,3)
    --(axis cs:3,3);

    \path [draw=color0, semithick] (axis cs:0,4)
    --(axis cs:3,4);

    \path [draw=color0, semithick] (axis cs:0,5)
    --(axis cs:3,5);

    \addplot [semithick, color1, mark=*, mark size=3, mark options={solid}, only marks, forget plot]
    table [row sep=\\]{%
    8   0 \\
    6   1 \\
    3   2 \\
    3   3 \\
    3   4 \\
    3   5 \\
    };

    \end{axis}

    \end{tikzpicture}

    \end{document}

Example

1

Pure TikZ where coding is a bit more difficult but you can definitely customize much more:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[y=0.8cm] % <-- Change this to change spacing
\draw (-0.5,0) rectangle (8.5,6);
\foreach \i in {0,...,8} {
    \draw[white!70!black] (\i,0)--(\i,6);
    \draw (\i,0)--(\i,-.1) node[below] {\i};
}
\begin{scope}[every node/.style={left,text width=5cm,align=left}]
    \draw (-.5,0.5)--(-.6,0.5) node {This is some long text};
    \draw (-.5,1.5)--(-.6,1.5) node {This is some quite long text};
    \draw (-.5,2.5)--(-.6,2.5) node {This is some very long text that that might break};
    \draw (-.5,3.5)--(-.6,3.5) node {This is some long text};
    \draw (-.5,4.5)--(-.6,4.5) node {This is some long text};
    \draw (-.5,5.5)--(-.6,5.5) node {Short text};
\end{scope}
\foreach \i/\j in {0/8,1/6,2/3,3/3,4/3,5/3} {
    \draw[blue!50!cyan] (0,\i+0.5)--(\j,\i+0.5);
    \node[circle,fill=blue!50!cyan] at (\j,\i+0.5) {};
}
\end{tikzpicture}
\end{document}

enter image description here


If you want to use article document class, here is the code

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[y=0.8cm] % <-- Change this to change spacing
\draw (-0.5,0) rectangle (8.5,6);
\foreach \i in {0,...,8} {
    \draw[white!70!black] (\i,0)--(\i,6);
    \draw (\i,0)--(\i,-.1) node[below] {\i};
}
\begin{scope}[every node/.style={left,text width=5cm,align=left}]
    \draw (-.5,0.5)--(-.6,0.5) node {This is some long text};
    \draw (-.5,1.5)--(-.6,1.5) node {This is some quite long text};
    \draw (-.5,2.5)--(-.6,2.5) node {This is some very long text that that might break};
    \draw (-.5,3.5)--(-.6,3.5) node {This is some long text};
    \draw (-.5,4.5)--(-.6,4.5) node {This is some long text};
    \draw (-.5,5.5)--(-.6,5.5) node {Short text};
\end{scope}
\foreach \i/\j in {0/8,1/6,2/3,3/3,4/3,5/3} {
    \draw[blue!50!cyan] (0,\i+0.5)--(\j,\i+0.5);
    \node[circle,fill=blue!50!cyan] at (\j,\i+0.5) {};
}
\end{tikzpicture}
\end{document}
  • Thank you for your answer. Sadly this doesn't help in my case. I reproduced your example with my data and it still is not aligned properly. I use a texfile which only includes the tikzpicture environment and its content and is inserted with \input{path}. If I would use the documenttype you suggested would the result be different? How can I input your example into my document including the tikz documentclass? – dharok Mar 18 at 12:28
  • @dharok So you are having problems with the document class? standalone is only for MWE purposes, you of course don't use it in your document. – JouleV Mar 18 at 12:33
  • No i tried it in my document and it compiled but still didnt reduce the space between line breaks. I just wonderd if in the document class in the first example would alter the result, but I got that wrong. At this point i have a work having big height, so the text looks normal and then using scaleboxes to reduce the size of the plot overall. – dharok Mar 18 at 16:21

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.