Da pgfplotstbale hier scheints wenig verwendet: https://tex.stackexchange.com/questions/455855/pgfplotstable-how-to-get-header-elements


alt text

Wie kann ich in einer Tabelle zum Beispiel die Nullen durch die Bezeichnung im jeweiligen Kopf ersetzen?

Mit string replace={0}{<ERSATZ>} kann ich durch irgendetwas ersetzen, doch wie greife ich dabei auf den jeweiligen header zu?

Öffne in Overleaf
\documentclass[border=5pt]{standalone}
\usepackage{pgfplotstable}

\pgfplotstableread{
A   B
1   2
0   2
1   0
0   2
0   2
1   0
}\test

\begin{document}

\pgfplotstabletypeset[string type,
%string replace={0}{aaa}
]{\test}

\end{document}

gefragt 18 Okt, 07:22

cis's gravatar image

cis
8.3k16171267
Akzeptiert: 68%

bearbeitet 19 Okt, 12:14

2

meiner Ansicht nach verwendest du das falsche Paket. pgfplotstable ist für das Drucken von Tabellen. Ich musste letztes Jahr ein größeres Projekt, das darauf baute, überarbeiten und denke, dass man all deine Wünsche wohl irgendwie hinbekommen kann, dass es aber zuviel Zeit kostet, die richtige Optionkombination hinzubekommen, und dass es schnell unübersichtlich und fehlerträchtig wird.

(18 Okt, 08:29) Ulrike Fischer

Ich finde pgfplotstable ist schon auch ein praktisches Werkzeug zum Manipulieren von Tabellen. Sehr mächtig, aber teils nicht einfach zu bedienen. Wird m.E. viel zu selten verwendet.

(18 Okt, 08:33) cis
2

wird schon seinen Grund haben ... ich zumindest ziehe es vor Datenverarbeitung und Datenrepräsentation sauberer zu trennen.

(18 Okt, 08:50) Ulrike Fischer

Nene, das muss schon dringend mit pdfplotstable gemacht werden (sonst hätte ich allgemein nach Tabellenmanipulation gefragt); weil das ist 1/3 Applets - die vielleicht insgesamt mal ein Paket geben könnten, wer weiß...

PS: Ja, das ist eben auch geil, das mit pgfplotstable umzusetzen... Schade ist nur, dass das scheints nur als "Low Level Hack" geht...

(18 Okt, 17:01) cis

Also meine Lösung wäre die Folgende:

Öffne in Overleaf
% Nullen ersetzen
\pgfplotsinvokeforeach{0,1} {%
\pgfplotstableset{
columns/#1/.style = {
string replace={0}{\pgfplotstablegetelem{0}{[index]#1}\of\test \pgfplotsretval}
}}}%

Das Unelegante daran ist, dass man \of\test in \pgfplotstablegetelem{0}{[index]#1}\of\test angeben muss. (Möglicherweise auch vermeidbar... vielleicht neue Frage)

alt text

Öffne in Overleaf
\documentclass[border=5pt]{standalone}
\usepackage{pgfplotstable}

\pgfplotstableread[header=false]{
A   B
1   2
0   2
1   0
0   2
0   2
1   0
}\test

\begin{document}

% Nullen ersetzen
\pgfplotsinvokeforeach{0,1} {%
\pgfplotstableset{
columns/#1/.style = {
string replace={0}{\pgfplotstablegetelem{0}{[index]#1}\of\test \pgfplotsretval}
}}}%

\pgfplotstabletypeset[string type,
skip rows between index={0}{1},% Benennungszeile ausblenden
every head row/.style={output empty row},% keinen header anzeigen
]{\test}

%Test:  \pgfplotstablegetelem{0}{[index]0}\of\test \pgfplotsretval
%\pgfplotstablegetelem{0}{[index]1}\of\test \pgfplotsretval
\end{document}
Permanenter link

beantwortet 19 Okt, 14:33

cis's gravatar image

cis
8.3k16171267

Vorschlag, der aber zusätzlich expl3 verwendet:

Öffne in Overleaf
\documentclass[border=5pt]{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}
\pgfplotstableread{
A   B
1   2
0   2
1   0
0   2
0   2
1   0
}\test
\pgfplotstablegetcolsof{\test}
\pgfmathtruncatemacro\colmax{\pgfplotsretval-1}

\usepackage{expl3}
\ExplSyntaxOn
\int_step_inline:nnnn
  {0}{1}{\colmax}
  {
    \pgfplotstablegetcolumnnamebyindex{#1}\of\test\to\colname
    \pgfplotstablemodifyeachcolumnelement{\colname}\of\test\as\cell
      {\pgfmathparse{\cell==0?"\colname":\cell}\xdef\cell{\pgfmathresult}}
  }
\ExplSyntaxOff

\begin{document}
\pgfplotstabletypeset[string type]{\test}
\end{document}

alt text

Permanenter link

beantwortet 19 Okt, 13:31

esdd's gravatar image

esdd
16.9k83854

Boah, also doch ein "Low Level Hack" (ich glaube so nennt man das...). Ich hatte jetzt versucht etwas schleifenartiges hiermit [wie-wende-ich-bei-pgfplotstable-column-type-befehle-auf-eine-auswahl-von-spalten-an] zu basteln. Tut an sich schon, aber ich bekomme immer nur das letzte Schleifenelement. :(

(19 Okt, 13:46) cis

Achso, also so gehts: \pgfplotsinvokeforeach{0,1} {% \pgfplotstableset{ columns/#1/.style = { string replace={0}{\pgfplotstablegetelem{0}{[index]#1}\of\test \pgfplotsretval} }}}

Das ist natürlich nicht so elegant, weil man "\of\test" angeben muss....

(19 Okt, 14:24) cis
1

Das \of\test ist doch bei mir auch drin?

(19 Okt, 15:04) esdd

expl3 in einer esdd Antwort ;-). Fängst du an, dich damit anzufreunden?

(20 Okt, 05:36) Ulrike Fischer

Ich habe jetzt meine Lösung prioritätisiert, weil sie mit Mitteln des Paketes auskommt.

"Das \of\test ist doch bei mir auch drin?" --> Es wäre natürlich gut, wenn man daraus einen Style machen könnnte, der dann allgemein anwendbar ist, ohne Angabe des Tabellennamens. Mit \gettablename (aus dem Handbuch) habe ich nichts hinbekommen. Verstehe den Befehl eh nicht, wann und wie der eingesetzt werden kann...

(21 Okt, 16:58) cis
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×37

Frage gestellt: 18 Okt, 07:22

Frage wurde angeschaut: 194 Mal

Zuletzt aktualisiert: 21 Okt, 16:58