我对 pgfplots 有疑问。我想根据电动机特性创建一个外壳方案。最后它应该看起来像这样(当然,还有一些更令人愉悦的颜色): 壳体方案示例 http://www.compact-dynamics.de/uploads/RTEmagicC_Wirkungsgradkennfeld_deutsch.jpg.jpg
数据存储在.CSV
文件中。
n_max/min-1,M_max/Nm,eta1
1000,10,0.64
1000,20,0.72
1000,30,0.75
1000,40,0.76
2000,10,0.71
2000,20,0.78
2000,30,0.81
2000,40,0.83
这是令我感到压力很大的 TeX 代码
\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.8}
\usepgfplotslibrary{patchplots}
\begin{filecontents*}{example.csv}
n_max/min-1,M_max/Nm,eta1
1000,10,0.64
1000,20,0.72
1000,30,0.75
1000,40,0.76
2000,10,0.71
2000,20,0.78
2000,30,0.81
2000,40,0.83
\end{filecontents*}
\begin{document}
\pagestyle{empty}
\begin{figure}
\begin{tikzpicture}
\centering
\begin{axis}[
xlabel=\(n~\mathrm{in~min^{-1}}\), xmin=0, xmax=12000,
ylabel=\(M~\mathrm{in~Nm}\), ymin=0, ymax=140,
legend pos = south east,
scaled ticks = false,
view={0}{90},
height=0.7\textwidth,width=1.0\textwidth]
% max values for torque and revs
\addplot[mark=none, very thick, color=gray, domain = 0:5160]{130};
\addplot[mark=none, very thick, color=gray, domain = 5140:12000]{(60*70000)/(2*3.14159*x)};
\addplot[mark=none]
table [x=n_max/min-1, y=M_max/Nm, col sep=comma] {example.csv};
%\addplot3[contour gnuplot={levels={0.7,0.8},labels over line,number=9},thick]
% table [x=n_max/min-1, y=M_max/Nm, z=eta1, col sep=comma] {example.csv};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
编译 LaTeX 后只显示
! Package pgfplots Error: Sorry, processing the input stream did not lead to en
d-of-scanline markers; the generated temporary file for 'contour external' does
not contain any of them (indicating that matrix structure is lost). To fix thi
s, you have the following options:
- Insert end-of-scanline markers into your input data (i.e. empty lines),
- provide two of the three options 'mesh/rows=<num matrix rows>, mesh/cols=<nu
m matrix cols>, mesh/num points=<total number points>'.
See the pgfplots package documentation for explanation.
Type H <return> for immediate help.
手册(版本 1.10 的第 138 页)中的一个例子pgfplots
产生了同样的错误。
\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.8}
\usepgfplotslibrary{patchplots}
\begin{document}
\begin{tikzpicture}%
\begin{axis}[view={0}{90}]%
\addplot3[contour gnuplot]%
coordinates {
(0,0,0) (1,0,0) (2,0,0) (3,0,0)
(0,1,0) (1,1,0.6) (2,1,0.7) (3,1,0.5)
(0,2,0) (1,2,0.7) (2,2,0.8) (3,2,0.5)
};
\end{axis}%
\end{tikzpicture}%
\end{document}
我认为问题在于 gnuplot 无法读取单独的数据点。一些使用 mesh/rows 和 mesh/cols 的实验表明,LaTeX 将 CSV 文件中的一行解释为一列,而不是三列。
谁能帮我这个?
答案1
正如@mvkorpel 所建议的,pgfplots
无法检测矩阵结构。从手册中复制/粘贴示例会丢失空行。
你的例子也缺乏矩阵结构的迹象,这就是为什么pgfplots
建议两种替代方案
要解决此问题,您有以下选择:
- 在输入数据中插入扫描线结束标记(即空行),
- 提供三个选项中的两个
mesh/rows=<num matrix rows>
,,mesh/cols=<num matrix cols>
。mesh/num points=<total number points>
如果你在每条扫描线后插入空行,它就会起作用。或者,如果你说mesh/rows=2
,它也会起作用。