PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : tikz + pgfplots(tableread) + symbolic x coords



romanrt
29-09-2011, 22:18
Hallo zusammen,

ich habe durch datamining unter anderem eine Tabelle erstellt aus welcher ich nun zwei Spalten verwenden möchte. Diese beiden Spalten sollen (vielleicht) in einem Balkendiagramm dargestellt werden. Spalte A beinhaltet den Namen der Variablen, Spalte B deren Wert. Die Variablen sollen nach Wert geordnet werden (sind sie sowieso schon in der original Tabelle),

Das Problem bei der Angelengeheit ist, dass pgfplot bisher immer nur Zahlen auf der x-Achse wollte, jetzt allerdings eine Möglichkeit hat dort auch "Wörter" zu verwenden. Allerdings geht das, soweit ich das sehe, nur wenn man diese Wörter auch vorher in Latex reinschreibt. Dabei geht dann natürlich der Vorteil vom Tabellenimport flöten.

Gibt es eine Möglichkeit die symbolic x coords aus der Tabelle (Spaltenindex 0) einzulesen?

Compiler ist pdflatex.

Minimalbeispiel:



\documentclass[
DIV12,
a4paper,
pagesize,
english,
11pt,
headings=small
]{scrartcl}

\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\usetikzlibrary{patterns}
\usetikzlibrary{plotmarks}
\usetikzlibrary{fit}
\pgfplotsset{compat=1.3}


\begin{document}


\section{Tut!}
\pgfplotstableread[col sep=semicolon]{asdf.csv.txt}\datatable
\begin{tikzpicture}
\begin{axis}[symbolic x coords={asdf, asd, fdas, ss, fdsa, qwer, zkj, adsfq, ziu, hj}]
\addplot+[%
ybar,
fill=black!60, %
mark=none, %
] %
coordinates{
(asdf,3)
(asd,4)
(fdas,7)
(ss,2)
(fdsa,8)
(qwer,8)
(zkj,7)
(adsfq,7)
(ziu,8)
(hj,9)
};
\end{axis}
\end{tikzpicture}


\section{Tut nicht!}
\pgfplotstableread[col sep=semicolon]{asdf.csv.txt}\datatable
\begin{tikzpicture}
\begin{axis}[symbolic x coords={table[y index = 1] from \datatable}]
\addplot+[%
ybar,
fill=red!60, %
mark=none, %
] %
table[y index = 1] from \datatable ;
\end{axis}
\end{tikzpicture}
\end{document}

mechanicus
30-09-2011, 15:30
Hi,

vielleicht als Basis einer Weiterentwicklung:

\documentclass[]{scrartcl}

\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\usetikzlibrary{patterns}
\usetikzlibrary{plotmarks}
\usetikzlibrary{fit}
\pgfplotsset{compat=newest}

\usepackage{filecontents}
\begin{filecontents}{asdf.csv}
asdf ; 3
asd ; 4
fdas ; 7
ss ; 2
fdsa ; 8
qwer ; 8
zkj ; 7
adsfq ; 7
ziu ; 8
hj ; 9
\end{filecontents}

\begin{document}


\section{Tut!}

\begin{tikzpicture}
\begin{axis}[symbolic x coords={asdf, asd, fdas, ss, fdsa, qwer, zkj, adsfq, ziu, hj}]
\addplot+[%
ybar,
fill=black!60, %
mark=none, %
] %
coordinates{
(asdf,3)
(asd,4)
(fdas,7)
(ss,2)
(fdsa,8)
(qwer,8)
(zkj,7)
(adsfq,7)
(ziu,8)
(hj,9)
};
\end{axis}
\end{tikzpicture}


\section{Tut nicht!}
\pgfplotstableread[col sep=semicolon]{asdf.csv}\datatable
\pgfplotstableforeachcolumnelement{[index] 0}\of\datatable\as\cell{%
\cell,}

\begin{tikzpicture}
\begin{axis}%[symbolic x coords]
\addplot+[%
xtick=\tickssave,
ybar,
fill=red!60, %
mark=none, ] %
table[x expr=\coordindex,y index = 1] from \datatable ;
\end{axis}
\end{tikzpicture}




\end{document}

Jetzt müsste man nur noch mit xtick-Spielen.

Gruß
Marco

romanrt
30-09-2011, 16:41
Super, vielen Dank. Das ist auf jeden Fall schon einmal eine Verbesserung.

Allerdings habe ich keine Ahnung, wie ich jetzt noch die Beschriftungen auf die x-Achse bekomme. Vielleicht hat ja noch einer eine Idee wie dieser gute Ansatz weiterentwickelt werden könnte.


Grüße

Roman

Feuersaenger
01-10-2011, 20:00
Hallo romanrt,

es gab schon mal so eine aehnliche Anfrage auf der pgfplots mailing liste; dabei ist auch ein Vorschlag, der dem Frager geholfen hat.

Vielleicht ist das auch was fuer Dich? Hier ist der Thread:

http://comments.gmane.org/gmane.comp.tex.pgfplots/335

Mit liebem Gruss

Christian