2
1

Hallo, ich habe heute zufällig pgfplotstable.sty entdeckt.

Was muss ich enstellen, dass

(1) Werte 1.0000 verschwinden?

(2) In der 1. Zeile <nichts> 0.1 0.2 0.25 0.3 0.4 0.5 steht

(3) Nachfolgende Nullen, erst ab der 2. Spalte, ausgeschrieben werden

Ich möchte (optisch, wie inhaltlich) diese Tabelle erzeugen (allerdings nur auf 4 Stellen genau):

alt text


Mein Versuch bisher:

alt text

Open in Online-Editor
\documentclass[border=2pt, varwidth]{standalone}
%\documentclass[]{article}
%\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{amsmath, amssymb, amsfonts}

\usepackage{filecontents}

\documentclass[border=2pt, varwidth]{standalone}
%\documentclass[]{article}
%\usepackage{pgfplots}
\usepackage{pgfplotstable, booktabs}
\usepackage{amsmath, amssymb, amsfonts}

\usepackage{filecontents}

\begin{document}
\begin{filecontents}{n5.txt}
0   0.5905  0.3277  0.2373  0.1681  0.0778  0.0313
1   0.9185  0.7373  0.6328  0.5282  0.3370  0.1875
2   0.9914  0.9421  0.8965  0.8369  0.6826  0.5000
3   0.9995  0.9933  0.9844  0.9692  0.9130  0.8125
4   1.0000  0.9997  0.9990  0.9976  0.9898  0.9688
\end{filecontents}

\pgfplotstabletypeset[
%fixed, 
zerofill, % Nullen anzeigen
precision=4,
/pgf/number format/.cd, use comma, % Kommas als Zahlentrennzeichen
%1000 sep={},
%/pgfplots/table/header=false, 
]{n5.txt}

\pgfmathprintnumber{12345.6789} \\
\footnotesize{\pgfmathprintnumber{12345.6789}} \\
\scriptsize{\pgfmathprintnumber{12345.6789}} \\
\tiny{\pgfmathprintnumber{12345.6789}} \\
\end{document}

gefragt 12 Jan '16, 16:50

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 12 Jan '16, 21:54

Upps, mit ist ganz entgangen, dass es schon Antworten gehagelt hat, diese muss jetzt erstmal studieren.

(12 Jan '16, 22:01) cis

Das folgende sieht zwar nicht ganz aus wie im Bild aber es kommt glaube ich ganz nah hin. Ich konnte leider einen Buchstaben im Binomialkoeffizient nicht richtig identifizieren, ich hab jetzt einfach v genommen.

Open in Online-Editor
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{amsmath}% \binom
\usepackage{colortbl}% \rowcolor, \cellcolor
\usepackage{diagbox}% \diagbox
\usepackage{filecontents}
\begin{document}

\begin{filecontents}{n5.txt}
0   0.5905  0.3277  0.2373  0.1681  0.0778  0.0313
1   0.9185  0.7373  0.6328  0.5282  0.3370  0.1875
2   0.9914  0.9421  0.8965  0.8369  0.6826  0.5000
3   0.9995  0.9933  0.9844  0.9692  0.9130  0.8125
4   1.0000  0.9997  0.9990  0.9976  0.9898  0.9688
\end{filecontents}

\pgfplotstableset{
  discard if equal/.style = {
    preproc cell content/.code={
      \ifdim##1pt=#1pt
        \pgfkeyssetvalue{/pgfplots/table/@cell content}{}
      \fi
    }
  },
  color cells/.style = {
    postproc cell content/.code={
      \pgfkeyssetvalue{/pgfplots/table/@cell content}{\cellcolor{#1}##1}
    }
  }
}

\pgfplotstabletypeset[
fixed zerofill, precision=4,
every head row/.style = {
  before row={
    \hline
    \rowcolor{pink} &
    \multicolumn{6}{c|}{%
      $\displaystyle\sum_{v=0}^k \binom{n}{v} p^v q^{n-v} \;,\quad q = 1-p$%
    } \\
    \rowcolor{pink}
  },
  after row=\hline
},
every last row/.style = {
  after row=\hline
},
columns/0/.style = {
  column name={\diagbox{$k$}{$p$}},
  precision=0,
  column type={|c|},
  color cells={pink}
},
columns/1/.style = {
  column name={$0.1$},
  discard if equal={1.0}
},
columns/2/.style = {
  column name={$0.2$},
},
columns/3/.style = {
  column name={$0.3$},
},
columns/4/.style = {
  column name={$0.4$},
},
columns/5/.style = {
  column name={$0.5$},
},
columns/6/.style = {
  column name={$0.6$},
  column type={c|}
}
]{n5.txt}
\end{document}

alt text

Permanenter link

beantwortet 12 Jan '16, 21:54

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

color cells/.style beseitigt bei mir die rules

(15 Jan '16, 05:41) cis

Muss man die Färbung wirklich so kompliziert mit color cells/.style definieren, gibt es nicht eine einfache Möglichkeit eine Spalte zu färben?

(15 Jan '16, 18:50) cis

Spielerei mit luatex. Warum die Tabelle einlesen, wenn man sie auch einfach ausrechnen kann?

Open in Online-Editor
\documentclass{article}
\usepackage{luacode}
\usepackage{amsmath}
\usepackage{diagbox}
\usepackage{xcolor}
\usepackage{colortbl}

\begin{luacode*}
function factorial(n)
    if (n == 0) then
        return 1
    else
        return n * factorial(n - 1)
    end
end

function choose(n,k)
   return factorial(n)/(factorial(k)*factorial(n-k))
end

function cis(p,n,k)
   local q = 1-p
   local S = 0
   for v=0,k do
      S = S + choose(n,v) * p^v * q^(n-v)
   end
   return S
end

function make_table()
   for n=5,10,5 do
      tex.sprint("\\cline{2-8}" .. n)
      for k=0,n do
         tex.sprint("&" .. k)
         for p=0.1,0.5,0.1 do
            local cell = cis(p,n,k)
            tex.sprint("&" .. string.format("%.4f",cell))
         end
         tex.sprint("&" .. n-k .. "\\\\")
      end
   end
end
\end{luacode*}

\begin{document}

\newcommand\emptycell[1]{\multicolumn{1}{#1}{\cellcolor{white}}}

\begin{tabular}{c|>{\columncolor{pink}}c|ccccc|>{\columncolor{lightgray}}c|}
  \cline{2-7}
  \rowcolor{pink} \emptycell{c|} &
  \multicolumn{6}{c|}{%
    $\displaystyle\sum_{v=0}^k \binom{n}{v} p^v q^{n-v} \;,\quad q = 1-p$%
  } & \emptycell{c} \\
  \rowcolor{pink}
  \cellcolor{white} n & \diagbox{$k$}{$p$} & 0.1 & 0.2 & 0.3 & 0.4 & 0.5 & \emptycell{c} \\
  \directlua{make_table()}
  \cline{2-8}
  \emptycell{c} & \emptycell{c|} & 0.9 & 0.8 & 0.7 & 0.6 & 0.5 & \diagbox{$p$}{$k$} \\
  \rowcolor{lightgray} \emptycell{c} & \emptycell{c|} &
  \multicolumn{6}{c|}{%
    $\displaystyle\sum_{v=k}^n \binom{n}{v} p^v q^{n-v} \;,\quad q = 1-p$%
  } \\
  \cline{3-8}
\end{tabular}

\end{document}

alt text

Permanenter link

beantwortet 12 Jan '16, 22:41

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

sehr gut. Muss man nur noch ein kleines bisschen am Layout feilen (die Horizontalen sollten bis in die n-Spalte ragen; entsprechend auch die k-Blöcke trennen).

Wegen LUA: Ich habe die Werte mit Mathematica berechnet (ist m.E. bei solchen Sachen sinnvoll); das geht vermutlich nicht mit TeX? Oder gibt es etwas Entsprechendes?

(13 Jan '16, 01:40) cis

Ah schade, das wird ja gar nimmer mit pgfplotstabel gemacht - ich wollte mir hier einiges abschauen.

(13 Jan '16, 01:57) cis

@cis: @Henri hat doch gezeigt, wie das mit TeX geht. Wenn Du meist, ob es auch mit pdflatex oder xelatex statt mit lualatex geht: Ja. Wie man Binomial-Koeffizienten effizient mit TeX berechnen kann, habe ich Dir ja bereits gezeigt. Außerdem kann inzwischen auch das Paket xint Fakultäten berechnen, falls man die ineffektive Methode mit Fakultäten verwenden will.

(13 Jan '16, 08:00) saputello

Ich meinte das so: Gibt es eine Möglichkeit, mathematica von TeX aus suzuführen?

(13 Jan '16, 20:39) cis

@cis: Das wäre dann aber eine ganz neue Frage, daher nur kurz: Bei lualatex kann man Lua-seitig jedes beliebige Programm aufrufen und dessen Ausgabe oder Fehlerausgabe oder Rückgabewert oder Ausgabedateien für TeX-Ausgaben weiterverarbeiten. Bei xelatex und pdflatex gibt es immerhin das \write18-Feature, mit dem man Programme ausführen kann. Wenn man Mathematica dann eine CSV-Datei mit dem Ergebnis schreiben lässt, kann man beispielsweise die pgfplotstable-Lösung verwenden.

(14 Jan '16, 07:50) saputello

Hier nochmal die LuaTeX Antwort, aber komplett in LaTeX. Benötigt expl3 und somit e-TeX.

Open in Online-Editor
\documentclass{article}
\usepackage{xparse}
\usepackage{amsmath}
\usepackage{diagbox}
\usepackage{xcolor}
\usepackage{colortbl}
\usepackage{siunitx}

\ExplSyntaxOn

\cs_new:Npn \int_factorial:n #1
 % computes #1!
 {
  \int_compare:nTF { (#1) == 0 }
   { 1 }
   { \int_eval:n { (#1) * \int_factorial:n { ((#1) - 1) } } }
 }

\cs_new:Npn \int_choose:nn #1#2
 % computes (#1 \choose #2)
 {
  \int_eval:n { \int_factorial:n { #1 } /
   ( \int_factorial:n { #2 } * \int_factorial:n { #1-#2 } )
  }
 }

\cs_new:Npn \int_pow:nn #1#2
 % computes #1^#2
 {
  \int_compare:nTF { (#2) == 0 }
   { 1 }
   { \int_eval:n { 1 \prg_replicate:nn { #2 } { * #1 } } }
 }

\cs_new_protected:Npn \cis_sum:nnn #1#2#3
 % p = #1, n = #2, k = #3
 {
  \fp_zero:N \l_tmpa_fp
  \int_step_inline:nnnn { 0 } { 1 } { #3 }
   {
    \fp_add:Nn \l_tmpa_fp
     {
      \int_choose:nn { #2 } { ##1 }
      * (#1)^(##1) * (1 - #1)^(#2 - ##1)
     }
   }
   \num{\fp_use:N \l_tmpa_fp}
 }

\fp_gzero_new:N \g__cis_p_fp
\int_gzero_new:N \g__cis_k_int
\int_gzero_new:N \g__cis_n_int

\cs_new_protected:Npn \cis_make_table:
 {
  \int_step_function:nnnN { 5 } { 5 } { 10 } \cis_table_nloop:n
 }

\cs_new_protected:Npn \cis_table_nloop:n #1
 {
  \int_gset:Nn \g__cis_n_int { #1 }
  \int_use:N \g__cis_n_int
  \int_step_function:nnnN { 0 } { 1 } { #1 } \cis_table_kloop:n
 }

\cs_new_protected:Npn \cis_table_kloop:n #1
 {
  \int_gset:Nn \g__cis_k_int { #1 }
  & \int_use:N \g__cis_k_int
  \fp_gzero:N \g__cis_p_fp
  \fp_do_while:nn { \g__cis_p_fp < 0.5 }
   {
    \fp_gadd:Nn \g__cis_p_fp { 0.1 }
    & \cis_sum:nnn { \g__cis_p_fp } { \g__cis_n_int } { \g__cis_k_int }
   }
  & \int_eval:n { \g__cis_n_int - \g__cis_k_int }
  \bool_lazy_and:nnTF
   { \int_compare_p:n { \g__cis_k_int == \g__cis_n_int } }
   { \int_compare_p:n { \g__cis_k_int == 5 } }
   { \\[1em] } { \\ }
 }

\NewDocumentCommand \maketable { }
 {
  \cis_make_table:
 }

\ExplSyntaxOff

\begin{document}

\newcommand\emptycell[1]{\multicolumn{1}{#1}{\cellcolor{white}}}

\sisetup{
  round-mode=places,
  round-precision=4,
  round-integer-to-decimal
}
\begin{tabular}{c|>{\columncolor{pink}}c|ccccc|>{\columncolor{lightgray}}c|}
  \cline{2-7}
  \rowcolor{pink} \emptycell{c|} &
  \multicolumn{6}{c|}{%
    $\displaystyle\sum_{v=0}^k \binom{n}{v} p^v q^{n-v} \;,\quad q = 1-p$%
  } & \emptycell{c} \\
  \rowcolor{pink}
  \cellcolor{white} n & \diagbox{$k$}{$p$} & 0.1 & 0.2 & 0.3 & 0.4 & 0.5 & \emptycell{c} \\
  \cline{1-8}
  \maketable
  \cline{2-8}
  \rowcolor{lightgray} \emptycell{c} & \emptycell{c|}
  & 0.9 & 0.8 & 0.7 & 0.6 & 0.5 & \diagbox{$p$}{$k$} \\
  \rowcolor{lightgray} \emptycell{c} & \emptycell{c|} &
  \multicolumn{6}{c|}{%
    $\displaystyle\sum_{v=k}^n \binom{n}{v} p^v q^{n-v} \;,\quad q = 1-p$%
  } \\
  \cline{3-8}
\end{tabular}

\end{document}

alt text

Permanenter link

beantwortet 13 Jan '16, 10:18

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 13 Jan '16, 10:32

Man kann die Ausgabe der Tabelle über diverse Optionen konfigurieren, die in der Anleitung dokumentiert sind.

Wenn der Kopf in die Wertedatei geschrieben wird, wird er automatisch erkannt, wenn er einen nicht nummerischen Wert enthält. Man kann mit header=has colnames auch vorgeben, dass unabhängig davon die erste Zeile immer ein Kopf ist. Die Ausgabe des Kopfes selbst kann man wiederum über columns/<name>/.style konfigurieren. Dabei ist in der Anleitung auch ein Beispiel, wie man einen leeren Spaltenkopf erzeugt.

Die Formatierung der Zahlen mit fester Nachkommastellenzahl, die ggf. mit Nullen aufgefüllt werden geschieht über fixed zerofill wobei Option precision die Nachkommastellen angibt.

Für die Ausblendung von 1.0000 habe ich direkt die Ausgabe der Spalten, also typeset cell/.code manipuliert. Vermutlich gibt es in den Tiefen von pgfmath auch noch andere Möglichkeiten dafür.

Open in Online-Editor
\documentclass[border=2pt, varwidth]{standalone}
%\documentclass[]{article}
%\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{amsmath, amssymb, amsfonts}

\usepackage{filecontents}

\begin{document}
\begin{filecontents}{n5.txt}
n   0.1     0.2     0.25    0.3     0.4     0.5
0   0.5905  0.3277  0.2373  0.1681  0.0778  0.0313
1   0.9185  0.7373  0.6328  0.5282  0.3370  0.1875
2   0.9914  0.9421  0.8965  0.8369  0.6826  0.5000
3   0.9995  0.9933  0.9844  0.9692  0.9130  0.8125
4   1.0000  0.9997  0.9990  0.9976  0.9898  0.9688
\end{filecontents}

\pgfplotstabletypeset[header=has colnames,
  columns/n/.style={
    int detect,
    column name={}
  },
  typeset cell/.code={
    \def\cmpta{#1}\def\cmptb{\pgfutilensuremath{1.0000}}%
    \ifnum\pgfplotstablecol=\pgfplotstablecols
      \ifx\cmpta\cmptb
        \pgfkeyssetvalue{/pgfplots/table/@cell content}{ \\}%
      \else
        \pgfkeyssetvalue{/pgfplots/table/@cell content}{#1\\}%
      \fi
    \else
      \ifx\cmpta\cmptb
        \pgfkeyssetvalue{/pgfplots/table/@cell content}{ &}%
      \else
        \pgfkeyssetvalue{/pgfplots/table/@cell content}{#1&}%
      \fi
    \fi
  },
  fixed zerofill,precision=4
]{n5.txt}
\end{document}

alt text

Man kann übriges auch Spaltentypen festlegen, Linien und Farben einfügen u. v. m. Zu vielem davon gibt es Beispiele in der Anleitung.

Permanenter link

beantwortet 12 Jan '16, 21:32

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 12 Jan '16, 21:42

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×39

gestellte Frage: 12 Jan '16, 16:50

Frage wurde gesehen: 11,477 Mal

zuletzt geändert: 15 Jan '16, 18:50