pgfplots 表读取处理非数字条目

pgfplots 表读取处理非数字条目

在之前的问题,我询问了如何创建根轨迹图,并得到了一个相当不错的答案,这要感谢 @percusse,使用\pgfplotstableread它我完成了 90% 的工作。但是,为了正确绘制这样的图表,我需要处理的一件事是处理根无限大的情况(相对于当它们终止于某个有限零点时,目前可以正确处理这种情况)。

matlab 输出给了我正在使用的下表:

pr1  pi1  pr2  pi2  pr3  pi3  pr4  pi4   k
  0    0   -1    0   -2    1   -2   -1    0
... % More numbers
 Inf   0   Inf   0   Inf   0   Inf   0   Inf

您可以看到其中的最后一行(有时)以“Inf”结尾。

\pgfplotstableread在创建如下图表时将会抛出这个结果:

NOTE: coordinate (Inf,0) has been dropped because it is unbounded (in x). (see also unbounded coords=jump).

我想处理最后一行条目,并决定是在最后一个位置放置一个圆圈(如果它不是无限的)或者以某种方式表明这个根是无限的,要么简单地放置一个箭头指示它的方向,要么将线延伸到(靠近)地块边界。

这是我从其他线程中获得的修改后的代码:

\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\pgfplotstableread{prob3.txt}\tablea

\begin{tikzpicture}[
%This is to provide the start  point cross marker 
start marker/.pic={\draw (-#1,-#1) -- (#1,#1) (#1,-#1)--(-#1,#1);}
]
  % Don't put any markers, limit the visible area from one side, draw grid
  \begin{axis}[no marks,grid=both,width=\linewidth]
  \pgfplotstablegetcolsof{\tablea}
  \pgfmathparse{\pgfplotsretval-2} % 1 for K and 1 for extra length
  \pgfmathparse{\pgfmathresult/2} % Real and Imag part for each
  \foreach \x in{1,...,\pgfmathresult}{ % Iterate over the columns of the table
    \addplot+[] table[x=pr\x,y=pi\x] {\tablea} % Draw the curves
    % Put the ending marker with size adjusted to 2pt
    node[draw,circle,inner sep=2pt] at (current plot end) {}
    pic at (current plot begin) {start marker=2pt};%Put the starting marker
  }
  \end{axis}
\end{tikzpicture}

绘制如下图

根轨迹图

使用此精确数据(prob3.txt):

pr1     pi1     pr2     pi2     pr3     pi3     pr4     pi4     k
0       0       -1      0       -2      1       -2      -1      0
-0.043035       0       -0.9    0       -2.0285 1.0103  -2.0285 -1.0103 0.1989
-0.14648        0       -0.70634        0       -2.0736 1.0295  -2.0736 -1.0295 0.55456
-0.37852        0       -0.40764        0       -2.1069 1.0459  -2.1069 -1.0459 0.85374
-0.39299        0       -0.39299        0       -2.107  1.0459  -2.107  -1.0459 0.8546
-0.3929 0.014558        -0.3929 -0.014558       -2.1071 1.046   -2.1071 -1.046  0.85545
-0.32759        0.39389 -0.32759        -0.39389        -2.1724 1.0824  -2.1724 -1.0824 1.5462
-0.3132 0.43556 -0.3132 -0.43556        -2.1868 1.0911  -2.1868 -1.0911 1.719
-0.29944        0.47216 -0.29944        -0.47216        -2.2006 1.0996  -2.2006 -1.0996 1.8917
-0.27357        0.53465 -0.27357        -0.53465        -2.2264 1.1162  -2.2264 -1.1162 2.2373
-0.22727        0.63256 -0.22727        -0.63256        -2.2727 1.1475  -2.2727 -1.1475 2.9285
-0.15017        0.77197 -0.15017        -0.77197        -2.3498 1.2035  -2.3498 -1.2035 4.3109
Inf     0       Inf     0       Inf     0       Inf     0       Inf

我还注意到最后一组列 ( pr4/pi4) 没有被绘制出来。任何想法都可以提供帮助(可能与它没有绘制超过 y = -0.8 的部分有关)

相关内容