使用 pgfplots/gnuplot 的 Shell 方案

使用 pgfplots/gnuplot 的 Shell 方案

我对 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,它也会起作用。

相关内容