在 TikZ/LaTeX 中定义一个(实值)变量

在 TikZ/LaTeX 中定义一个(实值)变量

我想通过foreach循环生成 TikZ 图像,其中某些坐标在此循环内发生变化。我该如何做这样简单的事

float x = 0.5;
x += 0.1;

在 TikZ/LaTeX 中?我在 tex.stackexchange 和 TikZ 手册上搜索过,但我只找到了计数器(整数...)。


我想要绘制像这样的条形图:http://www.statistiker-wg.de/pgf/tutorials/barplot.htm(页面底部,pdf 文件:http://www.statistiker-wg.de/pgf/pics/barplot4.pdf),但我不想手动指定 x 坐标。

  \definecolor{myblue}{HTML}{92dcec}

  \begin{tikzpicture}

  \draw (0cm,0cm) -- (15.5cm,0cm);  %Abzisse
  \draw (0cm,0cm) -- (0cm,-0.1cm);  %linkes Ende der Abzisse
  \draw (15.5cm,0cm) -- (15.5cm,-0.1cm);  %rechtes Ende der Abzisse

  \draw (-0.1cm,0cm) -- (-0.1cm,4.5cm);  %Ordinate
  \draw (-0.1cm,0cm) -- (-0.2cm,0cm);  %unteres Ende der Ordinate
  \draw (-0.1cm,4.5cm) -- (-0.2cm,4.5cm) node [left] {\%};  %oberes Ende der Ordinate

  \foreach \x in {1,...,4}  %Hilfslinien
    \draw[gray!50, text=black] (-0.2 cm,\x cm) -- (15.5 cm,\x cm) 
      node at (-0.5 cm,\x cm) {\x};  %Beschriftung der Hilfslinien

    \node at (7.5cm,5cm) {Wachstumsrate des realen BIP für die zehn
                           Bevölkerungsreichsten Staaten der EU 2005};  %Überschrift

  \foreach \x/\y/\country in {0.5/4.1/Rumänien,  %\x ist Anfang der Säulen
                              2/3.7/Griechenland,  %\y ist Höhe der Säulen
                              3.5/3.5/Spanien,
                              5/3.5/Polen,
                              6.5/1.9/Großbritannien,
                              8/1.5/Niederlande,
                              9.5/1.2/Frankreich,
                              11/0.9/Deutschland,
                              12.5/0.5/Portugal,
                              14/0.1/Italien}
    {
     \draw[fill=myblue] (\x cm,0cm) rectangle (1cm+\x cm,\y cm) %die Säulen
       node at (0.5cm + \x cm,\y cm + 0.3cm) {\y}; %die Prozente über den Säulen
     \node[rotate=45, left] at (0.6 cm +\x cm,-0.1cm) {\country}; %Säulenbeschriftung
    };

\end{tikzpicture}

答案1

我必须同意杰克的观点,链接网站上的例子可能是在没有pgfplots在我看来非常非常繁琐。而且,有了解决方案,重用数据就容易多了pgfplotstable

这是没有手动输入的 TikZ 版本(我使用过 LuaLaTeX 或 XeLaTeX ,我不知道你用的是哪个,也许吧inputenc

\documentclass[tikz,border=5mm]{standalone}
\usepackage{fontspec}
\definecolor{myblue}{HTML}{92dcec}
\begin{document}
  \begin{tikzpicture}

  \draw (0cm,0cm) -- (15.5cm,0cm);  %Abzisse
  \draw (0cm,0cm) -- (0cm,-0.1cm);  %linkes Ende der Abzisse
  \draw (15.5cm,0cm) -- (15.5cm,-0.1cm);  %rechtes Ende der Abzisse

  \draw (-0.1cm,0cm) -- (-0.1cm,4.5cm);  %Ordinate
  \draw (-0.1cm,0cm) -- (-0.2cm,0cm);  %unteres Ende der Ordinate
  \draw (-0.1cm,4.5cm) -- (-0.2cm,4.5cm) node [left] {\%};  %oberes Ende der Ordinate

  \foreach \x in {1,...,4}  %Hilfslinien
    \draw[gray!50, text=black] (-0.2 cm,\x cm) -- (15.5 cm,\x cm) 
      node at (-0.5 cm,\x cm) {\x};  %Beschriftung der Hilfslinien

    \node at (7.5cm,5cm) {Wachstumsrate des realen BIP für die zehn
                           Bevölkerungsreichsten Staaten der EU 2005};  %Überschrift

  \foreach \y/\country[count=\x from 0] in {4.1/Rumänien,  %\x ist Anfang der Säulen
                              3.7/Griechenland,  %\y ist Höhe der Säulen
                              3.5/Spanien,
                              3.5/Polen,
                              1.9/Großbritannien,
                              1.5/Niederlande,
                              1.2/Frankreich,
                              0.9/Deutschland,
                              0.5/Portugal,
                              0.1/Italien}
    {
     \draw[fill=myblue,xshift=0.5cm] (0.5 + 1.5*\x cm,0cm) rectangle (1cm+1.5*\x cm,\y cm) %die Säulen
       node at (0.5cm + 1.5*\x cm,\y cm + 0.3cm) {\y}; %die Prozente über den Säulen
     \node[rotate=45, left] at (1.15 cm + 1.5*\x cm,-0.1cm) {\country}; %Säulenbeschriftung
    };
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

这不是对问题的直接回答,而是 PGFPlots 如何用于此目的的一个例子:

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots, pgfplotstable}
\pgfplotsset{compat=1.7}
\usepackage[utf8]{inputenc}

\begin{document}
\pgfplotstableread[col sep=comma]{
Land, Wert
Rumänien, 4.1
Griechenland, 3.7
Spanien, 3.5
Polen, 3.5
Grossbritannien, 1.9
Niederlande, 1.5
Frankreich, 1.2
Deutschland, 0.9
Portugal, 0.5
Italien, 0.1
}\datatable

\begin{tikzpicture}
\begin{axis}[   
    x=10mm,
    ybar, bar width=6mm,
    ymin=0,
    xtick=data,
    every x tick label/.style={
        anchor=east,
        rotate=45
    },
    xticklabels from table={\datatable}{Land},
    nodes near coords,
    axis lines*=left,
    ylabel=\%, ylabel style={rotate=-90},
    title style={align=center},
    title={Wachstumsrate des realen BIP für die\\ zehn                            bevölkerungsreichsten Staaten der EU 2005}
]
\addplot [black, fill=cyan] table [col sep=comma, x expr=\coordindex] {\datatable};
\end{axis}
\end{tikzpicture}

\end{document}

相关内容