Das Diagramm sieht bei 7 Einträgen in der Liste in Ordnung aus. Wenn sich aber die Anzahl der Einträge ändert bleibt die Breite des Diagramms gleich. Wie kann ich die Breite variabel machen? % \RequirePackage{filecontents} % evtl. brauchbar \begin{filecontents}{data.csv} Nr, Name, Vorname, Stimmen 1, Name1, Vorname1, 13 2, Name2, Vorname2, 36 3, Name3, Vorname3, 15 4, Name4, Vorname4, 13 5, Name5, Vorname5, 6 6, Name6, Vorname6, 12 7, Name7, Vorname7, 25 \end{filecontents} \documentclass[tikz]{standalone} \usepackage[utf8]{inputenc} \usepackage{pgfplots} \usepackage{pgfplotstable} \pgfplotsset{compat=1.16} \makeatletter \pgfplotsset{ /pgfplots/flexible xticklabels from table/.code n args={3}{% \pgfplotstableread[#3]{#1}\coordinate@table \pgfplotstablegetcolumn{#2}\of{\coordinate@table}\to\pgfplots@xticklabels \let\pgfplots@xticklabel=\pgfplots@user@ticklabel@list@x } } \makeatother \newcommand{\saeulendiagramm}[1]{ \begin{tikzpicture} \begin{axis}[ ybar, xtick=data, ymajorgrids=true, bar width=0.7cm, xtick align=inside, ylabel={Stimmen}, flexible xticklabels from table={#1}{Name}{col sep=comma}, x tick label style={font=\normalsize, rotate=45, anchor=east} ] %\addplot[fill=blue] table [x index=0,y index=3, col sep = comma] {#1}; \addplot+[fill=blue] table[x expr=\coordindex,y index = 3, col sep=comma] from {#1}; \end{axis} \end{tikzpicture} } \begin{document} \saeulendiagramm{data.csv} \end{document} |
Neue Antwort:Du musst scheints einfach den x-Maßstab anpassen, dann verbreitert sich das Diagramm automatisch: Ich finde das Auslesen der Zeilenanzahl usw. allerdings spaßiger.... Alte Antwort:Das ist in der Tat ein interessanter Effekt, ob das wohl Absicht ist? Bekanntlich lässt sich die absolute Breite des pgfplots-Graphen festlegen ( Also könntest Du die
Zeilenzahl auslesen und ggf. noch einen Streckfaktor ergänzen und damit die absolute Breite des jeweiligen Graphen festlegen
Hinweise: Öffne in Overleaf
\RequirePackage{filecontents} % evtl. brauchbar \begin{filecontents*}{\jobname-data.csv} Nr, Name, Vorname, Stimmen 1, Name1, Vorname1, 13 2, Name2, Vorname2, 36 3, Name3, Vorname3, 15 4, Name4, Vorname4, 13 5, Name5, Vorname5, 6 6, Name6, Vorname6, 12 7, Name7, Vorname7, 25 8, Name7, Vorname7, 26 9, Name7, Vorname7, 27 10, Name7, Vorname7, 28 11, Name7, Vorname7, 29 12, Name7, Vorname7, 30 \end{filecontents*} %\documentclass[]{article} \documentclass[tikz]{standalone} \usepackage[utf8]{inputenc} \usepackage{pgfplots} \usepackage{pgfplotstable} \pgfplotsset{compat=1.16} \makeatletter \pgfplotsset{ /pgfplots/flexible xticklabels from table/.code n args={3}{% \pgfplotstableread[#3]{#1}\coordinate@table \pgfplotstablegetcolumn{#2}\of{\coordinate@table}\to\pgfplots@xticklabels \let\pgfplots@xticklabel=\pgfplots@user@ticklabel@list@x } } \makeatother \newcommand{\saeulendiagramm}[2][]{ \begin{tikzpicture} \begin{axis}[ ybar,% ybar interval=0.7, xmin=0, xtick=data, ymajorgrids=true, bar width=0.7cm, xtick align=inside, ylabel={Stimmen}, flexible xticklabels from table={#2}{Name}{col sep=comma}, x tick label style={font=\normalsize, rotate=45, anchor=east}, % Neu #1, ] %\addplot[fill=blue] table [x index=0,y index=3, col sep = comma] {#1}; \addplot+[fill=blue, draw=red, %<---- ] table[x expr=\coordindex,y index = 3, col sep=comma, columns=1, ] from {#2}; \end{axis} \end{tikzpicture} } \begin{document} \saeulendiagramm[skip coords between index={7}{999}, title=Alt:]{\jobname-data.csv} \pgfplotstablegetrowsof{\jobname-data.csv} \pgfmathsetmacro{\Breite}{1.2*(\pgfplotsretval-1)} % Zeilenzahl x Streckfaktor \saeulendiagramm[width=\Breite cm, %bar width=5mm, % optional title={Neu (width=\Breite cm):}]{\jobname-data.csv} \end{document} beantwortet 14 Mai '19, 13:59 cis |
PS: Dein Edit war nicht nötig. Mit filecontents war schon goldrichtig! Zum Problem - Morgen mal schauen (falls niemand schneller ist).
Die Breite des plots ist mit
width
änderbar, z.B.\begin{axis}[width=10cm,...
.@Murmeltier Das Festlegen einer absoluten Breite entspricht meiner 'alten AW'. Da er das automatisch haben will, hatte ich die width abhängig von der Zeilenzahl der Tabelle berechnen lassen. Aber m.E. reicht bereits das Angeben eines Maßstabs ('x=1.5' / 'x=9mm'), um eine automatische Anpassung zu erreichen.