我有一些來自儲存在一些 csv 檔案中的數值實驗的數據,我使用這些數據將其讀入 LaTeX
\pgfplotstableread{Results/test.csv}\data
這些資料由 x、y 和 z 座標組成,我現在想要繪製 的水平曲線z=1
。有幾個人建議使用 gnuplot,例如繪製水平曲線,我嘗試將其用於數據點
\addplot3 [contour gnuplot={levels={1},labels=false,draw color=black}] table[x={x}, y={y}, z={z}]{\data};
我用 --shell-escape 編譯。然而,這不起作用並拋出錯誤
ExponentialSDE.tex(第 497 行)套件 pgfplots 錯誤:抱歉,處理輸入流沒有導致掃描線結束標記;產生的“contour external”臨時檔案不包含其中任何一個(表示矩陣結構遺失)。
我讀到導致此錯誤的一個典型問題是缺少 gnuplot (這是有道理的)。對於我的情況,安裝了 gnuplot,這是我運行時的終端輸出gnuplot
>>gnuplot
G N U P L O T
Version 5.2 patchlevel 6 last modified 2019-01-01
Copyright (C) 1986-1993, 1998, 2004, 2007-2018
Thomas Williams, Colin Kelley and many others
gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help FAQ"
immediate help: type "help" (plot window: hit 'h')
您對我做錯的事情有什麼建議嗎?以及如何獲得水平曲線?
完整的MWE
\documentclass[11pt]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{pgfplotstable}
\pgfplotstableread{
x y z
-1 -1 2
-1 0 1
-1 1 2
0 -1 1
0 0 0
0 1 1
1 -1 2
1 0 1
1 1 2
}{\data}
\begin{document}
%Not working
\begin{tikzpicture}
\begin{axis}[view={0}{90}]
\addplot3 [contour gnuplot={levels={1},labels=false,draw color=black}] table[x={x}, y={y}, z={z}]{\data};
\end{axis}
\end{tikzpicture}
%Test for pgfplotstable is properly read
\begin{tikzpicture}
\begin{axis}[]
\addplot table[x={x}, y={y}]{\data};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
看來我的compat=newest
比你的新,因為就我而言,它準確地指示我該怎麼做:
!包 pgfplots 錯誤:抱歉,處理輸入流沒有導致掃描線結束標記;產生的“contour external”臨時檔案不包含其中任何一個(表示矩陣結構遺失)。要解決此問題,您有以下選項: - 將掃描線結束標記插入輸入資料(即空白行), - 提供三個選項中的兩個選項“mesh/rows=、mesh/cols=、mesh/num”點='.
誰會拒絕遵循如此明確的指示呢? ;-) 所以我
- 向資料添加空行並
mesh/rows=3, mesh/cols=3
到繪圖命令
並得到了
\documentclass[11pt]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{pgfplotstable}
\pgfplotstableread{
x y z
-1 -1 2
-1 0 1
-1 1 2
0 -1 1
0 0 0
0 1 1
1 -1 2
1 0 1
1 1 2
}{\data}
\begin{document}
%Now working
\begin{tikzpicture}
\begin{axis}[view={0}{90}]
\addplot3 [contour gnuplot={levels={1},labels=false,draw color=black},
mesh/rows=3, mesh/cols=3] table[x={x}, y={y}, z={z}]{\data};
\end{axis}
\end{tikzpicture}
\end{document}