减少 pgfplots barplot 中刻度标签之间的距离

减少 pgfplots barplot 中刻度标签之间的距离

我在 Tikz 中的代码有问题。我需要第 x 行名称之间的空格更小。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[czech]{babel}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{amsthm}
\usepackage{graphicx}
\usepackage{calc}
\usepackage{ifthen}
\usepackage{tikz}
\usepackage[colorlinks=true, linkcolor=black]{hyperref}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.8}
\begin{document}

\begin{figure}[htb] 
\centering
\begin{tikzpicture} 
    \begin{axis}[
        ybar,
        xlabel = Strany,
        xmin = 0.5,
        xmax = 10.5,
        ymin = 0,
        ymax = 25,
        axis x line* = bottom,
        axis y line* = left,
        ylabel= Procenta,
        width= 2.8\textwidth,
        height = 0.6\textwidth,
        ymajorgrids = true,
        bar width = 2mm,
        xticklabels = \empty,
        extra x ticks = {1,2,3,4,5,6,7},
        extra x tick labels = {ČSSD,ANO,KSČM,TOP,Ods,Úsvit,KDU-ČSL},
        ]
        \addplot+[mark=none, orange, very thick] coordinates {
            (1,20)
        };
        \addplot+[mark=none, blue, very thick] coordinates {
            (2,19)
        };
        \addplot+[mark=none, purple, very thick] coordinates {
            (3,15)
        };
        \addplot+[mark=none, blue, very thick] coordinates {
            (4,12)
        };
        \addplot+[mark=none, green, very thick] coordinates {
            (5,8)
        };
        \addplot+[mark=none, yellow, very thick] coordinates {
            (6,7)
        };
        \addplot+[mark=none, yellow, very thick] coordinates {
            (7,7)
        };
    \end{axis} 
\end{tikzpicture}
\caption[Volby do Poslanecké sněmovny 2014]{Volby do Poslanecké sněmovny         2014}
\label{fig:new_ev}
\end{figure}
\end{document}

答案1

条形之间的间距主要由轴的宽度决定,因此自然删除之前2.8\textwidth会有所帮助。然而,还有另一个问题:

使用时,\begin{axis}[ybar,...]每个想法都会\addplot在每个x坐标处创建一个条形。以手册中的以下示例为例:

\documentclass[border=4mm]{standalone}
\usepackage{pgfplots}
\begin{document}    
\begin{tikzpicture}
\begin{axis}[
legend style={at={(0.5,-0.15)},
anchor=north,legend columns=-1},
ybar,
bar width=7pt,
]
\addplot
coordinates {(1930,50e6) (1940,33e6)
(1950,40e6) (1960,50e6) (1970,70e6)};

\addplot
coordinates {(1930,38e6) (1940,42e6)
(1950,43e6) (1960,45e6) (1970,65e6)};
\addplot
coordinates {(1930,15e6) (1940,12e6)
(1950,13e6) (1960,25e6) (1970,35e6)};

\legend{Far,Near,Here,Annot}
\end{axis}
\end{tikzpicture}
\end{document}

在每个 x 坐标上生成三个条形,每个条形对应一个\addplot,稍微偏移一点,这样就不会重叠:

在此处输入图片描述

要点是,当\addplot您的 中有多个 s时axis,它们将相对于 x 坐标稍微移动一点,以便为其他\addplots 中的条形腾出空间。因此,当您有七个\addplots 时,pgfplots将在每个 x 坐标处为七个条形腾出空间。因此,第一个条形位于刻度线的最左侧,第二个条形稍近一点,依此类推,最后一个条形位于刻度线的最右侧。

你应该做的是

  1. 只使用一个\addplot,或者

  2. 移至ybar选项\addplot

如果选择第一种,所有条形都会有相同的颜色,但我认为在这种情况下也一样。以下代码演示了这两种方法。

下面你会注意到我使用了symbolic x coords,删除了xmin/ xmax,并添加了xticklabel style={font=\vphantom{Ú}}。后者使所有刻度标签的高度相同,因此它们正确对齐。我还将宽度减小到0.95\textwidth,并bar width稍微增加了 。

在此处输入图片描述

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.8}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture} 
    \begin{axis}[
        ybar,
        xlabel = Strany,
        ymin = 0,
        ymax = 25,
        axis x line* = bottom,
        axis y line* = left,
        ylabel= Procenta,
        width= 0.95\textwidth,
        height = 0.6\textwidth,
        ymajorgrids = true,
        bar width = 5mm,
        symbolic x coords = {ČSSD,ANO,KSČM,TOP,Ods,Úsvit,KDU-ČSL},
        xticklabel style={font=\vphantom{Ú}}
        ]
        \addplot coordinates {
            (ČSSD,20) (ANO,19) (KSČM,15) (TOP,12) (Ods,8) (Úsvit,7) (KDU-ČSL,7)
        };
    \end{axis} 
\end{tikzpicture}
\caption[Volby do Poslanecké sněmovny 2014]{Volby do Poslanecké sněmovny 2014}
\label{fig:new_ev}
\end{figure}
\begin{figure}
\centering
\begin{tikzpicture} 
    \begin{axis}[
        no markers,
        xlabel = Strany,
        ymin = 0,
        ymax = 25,
        axis x line* = bottom,
        axis y line* = left,
        ylabel= Procenta,
        width= 0.95\textwidth,
        height = 0.6\textwidth,
        ymajorgrids = true,
        bar width = 5mm,
        symbolic x coords = {ČSSD,ANO,KSČM,TOP,Ods,Úsvit,KDU-ČSL},
        xticklabel style={font=\vphantom{Ú}}
        ]
        \addplot+[ybar, fill, orange] coordinates {
            (ČSSD,20)
        };
        \addplot+[ybar, fill, blue] coordinates {
            (ANO,19)
        };
        \addplot+[ybar, fill, purple] coordinates {
            (KSČM,15)
        };
        \addplot+[ybar, fill, blue] coordinates {
            (TOP,12)
        };
        \addplot+[ybar, fill, green] coordinates {
            (Ods,8)
        };
        \addplot+[ybar, fill, yellow] coordinates {
            (Úsvit,7)
        };
        \addplot+[ybar, fill, yellow] coordinates {
            (KDU-ČSL,7)
        };
    \end{axis} 
\end{tikzpicture}
\caption[Volby do Poslanecké sněmovny 2014]{Volby do Poslanecké sněmovny 2014}
\label{fig:new_ev}
\end{figure}
\end{document}

相关内容