von monchi » Di 6. Okt 2015, 21:11
Hi,
ich hab mir nach längerer Basteleit eine Säulendiagramm zusammengestellt.
Ich habe eine große Datei mit Daten, welche ich in verschiedenen Diagrammen (in verschiedenen Kombinationen) darstellen will.
Möglichkeit 1)
Ich lege für jedes Diagramm eine extra Datei an, welche nur die Daten zu dem jeweiligen Diagramm beinhaltet
==> sehr viel Arbeit, welche ich mir gerne ersparen möchte.
Möglichkeit 2)
Ich verwende einen "Filter" welcher nur gewisse Zeilen berücksichtigt
==> Alle Daten könnten zusammen in einer Datei bleiben
Ich hab mich für Möglichkeit 2 entschieden. Das ganze funktioniert auch wunderbar, abgesehen davon das die X-Achsenbeschriftung aus den "ungefilterten" Daten generiert wird. Zum Beispiel will ich nur Daten aus den vier Zeile 1, 5, 8 und neun berücksichtigen. Die Achsenbeschriftung wird aber unabhängig von meinen gewählten Kriterien aus den den ersten (in diesem Fall 4) Zeilen generiert.
\documentclass[]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} % correct pdf output (correct umlaut charaters)
\usepackage{ngerman}
\usepackage{graphicx}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}
\usepackage{filecontents}
\pgfplotsset{compat=newest,compat/show suggested version=false}
\begin{document}
\begin{filecontents}{energiekosten.csv}
Anlagentyp;FilterA;FilterB;Energiekosten
Typ 1;20;2014;23400
Typ 1;30;2014;23455
Typ 1;20;2016;33434
Typ 1;30;2016;23455
Typ 2;20;2014;55634
Typ 2;30;2014;43455
Typ 2;20;2016;70344
Typ 2;30;2016;23445
Typ 3;20;2014;63400
Typ 3;30;2014;43455
Typ 3;20;2016;23123
Typ 3;30;2016;63455
Typ 4;20;2014;13400
Typ 4;30;2014;43455
Typ 4;20;2016;73434
Typ 4;30;2016;63455
\end{filecontents}
\begin{figure}[h]%
\centering
\begin{tikzpicture}
\pgfplotstableread[col sep=semicolon]{energiekosten.csv}\diagdata
\begin{axis}[
ybar,
x filter/.code={\pgfplotstablegetelem{\coordindex}{FilterA}\of{\diagdata}
\ifnum\pgfplotsretval=20
\pgfplotstablegetelem{\coordindex}{FilterB}\of{\diagdata}
\ifnum\pgfplotsretval=2016
\else
\def\pgfmathresult{}
\fi
\else
\def\pgfmathresult{}
\fi
},
ylabel={Gesamtenergiekosten},
xtick pos=left,
ytick pos=left,
xticklabels from table={\diagdata}{Anlagentyp},
xtick=data,
x tick label style={rotate=45, anchor=east}
]
\addplot table [x expr=\coordindex, y={Energiekosten}] {\diagdata};
\legend{used}
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
Hat jemand eine Idee wie ich das in den Griff bekommen kann?
Hi,
ich hab mir nach längerer Basteleit eine Säulendiagramm zusammengestellt.
Ich habe eine große Datei mit Daten, welche ich in verschiedenen Diagrammen (in verschiedenen Kombinationen) darstellen will.
Möglichkeit 1)
Ich lege für jedes Diagramm eine extra Datei an, welche nur die Daten zu dem jeweiligen Diagramm beinhaltet
==> sehr viel Arbeit, welche ich mir gerne ersparen möchte.
Möglichkeit 2)
Ich verwende einen "Filter" welcher nur gewisse Zeilen berücksichtigt
==> Alle Daten könnten zusammen in einer Datei bleiben
Ich hab mich für Möglichkeit 2 entschieden. Das ganze funktioniert auch wunderbar, abgesehen davon das die X-Achsenbeschriftung aus den "ungefilterten" Daten generiert wird. Zum Beispiel will ich nur Daten aus den vier Zeile 1, 5, 8 und neun berücksichtigen. Die Achsenbeschriftung wird aber unabhängig von meinen gewählten Kriterien aus den den ersten (in diesem Fall 4) Zeilen generiert.
[code]
\documentclass[]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} % correct pdf output (correct umlaut charaters)
\usepackage{ngerman}
\usepackage{graphicx}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}
\usepackage{filecontents}
\pgfplotsset{compat=newest,compat/show suggested version=false}
\begin{document}
\begin{filecontents}{energiekosten.csv}
Anlagentyp;FilterA;FilterB;Energiekosten
Typ 1;20;2014;23400
Typ 1;30;2014;23455
Typ 1;20;2016;33434
Typ 1;30;2016;23455
Typ 2;20;2014;55634
Typ 2;30;2014;43455
Typ 2;20;2016;70344
Typ 2;30;2016;23445
Typ 3;20;2014;63400
Typ 3;30;2014;43455
Typ 3;20;2016;23123
Typ 3;30;2016;63455
Typ 4;20;2014;13400
Typ 4;30;2014;43455
Typ 4;20;2016;73434
Typ 4;30;2016;63455
\end{filecontents}
\begin{figure}[h]%
\centering
\begin{tikzpicture}
\pgfplotstableread[col sep=semicolon]{energiekosten.csv}\diagdata
\begin{axis}[
ybar,
x filter/.code={\pgfplotstablegetelem{\coordindex}{FilterA}\of{\diagdata}
\ifnum\pgfplotsretval=20
\pgfplotstablegetelem{\coordindex}{FilterB}\of{\diagdata}
\ifnum\pgfplotsretval=2016
\else
\def\pgfmathresult{}
\fi
\else
\def\pgfmathresult{}
\fi
},
ylabel={Gesamtenergiekosten},
xtick pos=left,
ytick pos=left,
xticklabels from table={\diagdata}{Anlagentyp},
xtick=data,
x tick label style={rotate=45, anchor=east}
]
\addplot table [x expr=\coordindex, y={Energiekosten}] {\diagdata};
\legend{used}
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
[/code]
Hat jemand eine Idee wie ich das in den Griff bekommen kann?