pgfplots(table) 類似公式的電子表格

pgfplots(table) 類似公式的電子表格

我目前正在嘗試 pgfplots 和 pgfplotstable 軟體包。當我想知道是否可以使用類似公式的電子表格時,我注意到可以創建新列(複製或轉換另一列)(這意味著新列的每個單元格的值應該是其左側單元格的值(同一行)+上面單元格的值(同一列),是的,必須進行一些初始化)。

有人知道這樣的功能嗎?如果是的話該怎麼做? (無論它只是 pgfplotstable 還是 pgfplots)

答案1

pgfplotstable這可以使用的巨集來完成,但有一些限制\pgfplotstablecreatecol(也create on use可以延遲創建列數據,但從 返回後其內容將丟失\pgfplotstabletypeset)。根據pgfplotstable文件:

目前,您一次只能存取一列的三個值:目前行、上一行和下一行。 (尚)不支援存取任意索引。

在下面的範例中,我實作了問題中描述的公式,並在「row -1」中使用(任意)值 100 對其進行初始化。由於初始表資料為:

 x   y
 0   1
 5   6
10  11

計算值是:

  • 1 + 100 = 101

  • 6 + 101 = 107

  • 11 + 107 = 118

為了存取動態建立的列中先前計算的值,我將它們全域儲存(這裡:僅使用最近計算的值\xdef\myPreviousValue{...}),因為pgfplotstable\prevrow巨集不允許存取正在建立的列中的值,因為它看來。如果訪問任何需要在正在建立的列中預先計算出值,例如,可以使用pgfmath陣列1expl3 tlor變數。seq

\begin{filecontents*}{data.csv}
 x   y
 0   1
 5   6
10  11
\end{filecontents*}

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

\pgfplotstableread[row sep=newline, col sep=space]{data.csv}\myTable

\newcommand*{\myPreviousValue}{100} % initialization (row -1, sort of)

% Dynamically create column z
\pgfplotstablecreatecol[
  create col/assign/.code={%
    \pgfmathsetmacro{\myValue}{int(\thisrow{y} + \myPreviousValue)}%
    \pgfplotstableset{create col/next content/.expand once={\myValue}}%
    \xdef\myPreviousValue{\myValue}%
  }]
{z}\myTable

\begin{document}

\pgfplotstabletypeset[
  columns/x/.style={column name={$x$}},
  columns/y/.style={column name={$y$}},
  columns/z/.style={column name={$z$}},
  every head row/.style={before row=\toprule, after row=\midrule},
  every last row/.style={after row=\bottomrule}
  ]{\myTable}

\end{document}

在此輸入影像描述

注意:我使用的表達式int()中的pgfmath可能看起來是不必要的,因為預設情況下,\pgfplotstabletypeset使用 and 格式化值\pgfmathprintnumber,同樣預設情況下,\pgfmathprintnumber偵測輸入的小數部分是否等於零,以便在特殊情況下列印整數。例如,\pgfmathprintnumber{118.0}預設列印 118。但是,如果沒有int(),儲存在中的值\myValue(以及創建的記憶體列和 in 中\myPreviousValue)將有一個尾隨.0;使用該int()功能可以防止這種情況發生。


註腳

  1. 搜尋kZ 和 PGF 手冊對於“數組訪問運算符”數學和物件導向的引擎部分。

相關內容