我想通过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}