Как импортировать таблицу с научным форматированием

Как импортировать таблицу с научным форматированием

Вот мой неработающий MWE. Как мне импортировать и построить таблицу с научным форматированием?

\documentclass[border=0mm]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}

\begin{filecontents}{data-export-scientific.csv}
"x";"y1";"y2";"y3"
"   1";"8.649e+01";"3.501e+01";"1.013e+01"
"   2";"8.597e+01";"3.672e+01";"6.306e+00"
"   3";"8.667e+01";"4.348e+01";"9.170e+00"
"   4";"8.287e+01";"4.270e+01";"1.052e+01"
"   5";"8.747e+01";"4.081e+01";"1.118e+01"
\end{filecontents}

\begin{document}
\begin{tikzpicture}

\pgfplotstabletypeset[columns/x/.style={string type},
                      columns/y1/.style={string type},
                      columns/y2/.style={string type},
                      columns/y3/.style={string type}]{data-export-scientific.csv}

\pgfplotstableread[col sep=semicolon]{data-export-scientific.csv}\myLoadedTable

\begin{axis}
\addplot[color=blue, only marks]table[x=x, y=y1]{\myLoadedTable};   
\end{axis}

\end{tikzpicture}
\end{document}

решение1

  • По словам автораpgfplotstable, предлагаемый способ решения проблемы двойных кавычек во входных данных — объявить их с помощью ignore chars={"}.

  • Я удалил ваши string typeобъявления стилей, поскольку все ваши входные данные числовые.

  • Вам необходимо вызвать \pgfplotstablereadс соответствующими параметрами ( col sep, ignore chars) для анализа данных CSVдовозможно, использовать \pgfplotstabletypesetдля набора таблицы в документе — если только вы не хотите анализировать необработанные данные несколько раз, но, по моему скромному мнению, это не имеет особого смысла.

  • Я применил следующий стиль:

    my numeric col/.style={
      sci, sci zerofill, sci sep align, precision=2, sci 10e
    }
    

    ко всем столбцам, кроме первого в таблице набора. Это делается с помощью:

    every column/.code={
      \ifnum\pgfplotstablecol>0\relax
        \pgfkeysalso{my numeric col}
      \fi
    }
    
  • Я реализовал удобное форматирование таблицы с помощью booktabsпакета и этой информации о стилях:

    every head row/.style={before row=\toprule, after row=\midrule},
    every last row/.style={after row=\bottomrule}
    
  • pgfplotsДля пущей убедительности я повысил уровень совместимости до 1.16 с помощью этой строки:
    \pgfplotsset{compat=1.16}
    
\documentclass{article}
\usepackage{booktabs}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepackage{pgfplotstable}

\begin{filecontents}{data-export-scientific.csv}
"x";"y1";"y2";"y3"
"   1";"8.649e+01";"3.501e+01";"1.013e+01"
"   2";"8.597e+01";"3.672e+01";"6.306e+00"
"   3";"8.667e+01";"4.348e+01";"9.170e+00"
"   4";"8.287e+01";"4.270e+01";"1.052e+01"
"   5";"8.747e+01";"4.081e+01";"1.118e+01"
\end{filecontents}

\pgfplotstableread[col sep=semicolon, ignore chars={"}]
  {data-export-scientific.csv}\myLoadedTable

\begin{document}

\begin{table}
  \centering
  \pgfplotstabletypeset[
    my numeric col/.style={
      sci, sci zerofill, sci sep align, precision=2, sci 10e
    },
    every column/.code={
      \ifnum\pgfplotstablecol>0\relax
        \pgfkeysalso{my numeric col}
      \fi
    },
    every head row/.style={before row=\toprule, after row=\midrule},
    every last row/.style={after row=\bottomrule}
    ]{\myLoadedTable}
  \caption{My table data}
\end{table}

\begin{figure}
  \centering
  \begin{tikzpicture}
    \begin{axis}
    \addplot[color=blue, only marks] table[x=x, y=y1] {\myLoadedTable};
    \end{axis}
  \end{tikzpicture}
  \caption{My plot}
\end{figure}

\end{document}

введите описание изображения здесь

введите описание изображения здесь

В качестве усовершенствования вы можете даже улучшить заголовки таблиц, используя математические формулы LaTeX с правильными индексами на основе номеров столбцов внутри значения /pgfplots/table/column name:

\documentclass{article}
\usepackage{booktabs}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepackage{pgfplotstable}

\begin{filecontents}{data-export-scientific.csv}
"x";"y1";"y2";"y3"
"   1";"8.649e+01";"3.501e+01";"1.013e+01"
"   2";"8.597e+01";"3.672e+01";"6.306e+00"
"   3";"8.667e+01";"4.348e+01";"9.170e+00"
"   4";"8.287e+01";"4.270e+01";"1.052e+01"
"   5";"8.747e+01";"4.081e+01";"1.118e+01"
\end{filecontents}

\pgfplotstableread[col sep=semicolon, ignore chars={"}]
  {data-export-scientific.csv}\myLoadedTable

\begin{document}

\begin{table}
  \centering
  \pgfplotstabletypeset[
    my numeric col/.style={
      sci, sci zerofill, sci sep align, precision=2, sci 10e,
      column name={$y_{#1}$}
    },
    every column/.code={
      \ifnum\pgfplotstablecol>0\relax
        \pgfkeysalso{my numeric col/.expanded={\pgfplotstablecol}}
      \fi
    },
    columns/x/.style={column name={$x$}},
    every head row/.style={before row=\toprule, after row=\midrule},
    every last row/.style={after row=\bottomrule}
    ]{\myLoadedTable}
  \caption{My table data}
\end{table}

\begin{figure}
  \centering
  \begin{tikzpicture}
    \begin{axis}
    \addplot[color=blue, only marks] table[x=x, y=y1] {\myLoadedTable};
    \end{axis}
  \end{tikzpicture}
  \caption{My plot}
\end{figure}

\end{document}

введите описание изображения здесь

Связанный контент