绘制零极点图

绘制零极点图

我正在尝试绘制一个零点极点图,用于某些滤波器设计。由于我找不到任何标准方法来实现这一点,我尝试使用 PGFPlots 的极点库。但是我遇到了一些麻烦。我绘制的第一个图结果不错,只有极点。但是当我尝试添加一些零点时,它缺少用于表示位置的标记部分。

\begin{tikzpicture}
\begin{polaraxis}[enlargelimits=false, % axis x line = bottom, axis y line=right,
% height=5cm, width=5cm, 
ytick={1}, %axis y line*=none, 
yticklabels={},
xtick={0,45,90,135,180,225,270,315,360},
%xticklabels={},
%separate axis lines=true,
every outer x axis line/.append style={color=red, opacity=0, fill opacity=0},
every outer y axis line/.append style={color=red, opacity=0, fill opacity=0},
xticklabels={0,
$\frac{2\pi}{8}$,
$\frac{4\pi}{8}$,
$\frac{6\pi}{8}$,
$\frac{8\pi}{8}$,
$\frac{10\pi}{8}$,
$\frac{12\pi}{8}$,
$\frac{14\pi}{8}$}
]
    \addplot+[data cs=polarrad,mark options={color=black, mark=o}] coordinates{(0,0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=o}] coordinates{(2*pi/8,0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=o}] coordinates{(4*pi/8,0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=o}] coordinates{(6*pi/8,0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=o}] coordinates{(8*pi/8,0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=o}] coordinates{(10*pi/8,0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=o}] coordinates{(12*pi/8,0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=o}] coordinates{(14*pi/8,0.9564)};

    \addplot+[data cs=polarrad,mark options={color=black, mark=asterisk}] coordinates{(0,2-0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=asterisk}] coordinates{(2*pi/8,2-0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=asterisk}] coordinates{(4*pi/8,2-0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=asterisk}] coordinates{(6*pi/8,2-0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=asterisk}] coordinates{(8*pi/8,2-0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=asterisk}] coordinates{(10*pi/8,2-0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=asterisk}] coordinates{(12*pi/8,2-0.9564)};
    \addplot+[data cs=polarrad,mark options={color=black, mark=asterisk}] coordinates{(14*pi/8,2-0.9564)};
    \addplot+[data cs=polarrad,mark options={fill opacity=00, opacity=00, mark=*}] coordinates{(0,1)};
\end{polaraxis}
\end{tikzpicture}

经过一些测试,似乎只要超过 5 个标记就会出现问题。超过这个数字,有些标记就无法正确渲染。

编辑:这是线条样式的问题。我没有明确将其设置为实线,所以过了一会儿它就变了。现在修复了。

答案1

出现部分绘制标记的问题是因为您使用了\addplot +,其中 表示+仍将使用正常绘图样式列表。在默认样式列表中,使用选项 绘制编号为 6 至 10 的绘图dashed, every mark/.append style=solid,因此线条为虚线,但标记为实线。由于您使用了选项mark options={...},因此您正在重置样式every mark,因此dashed现在也适用于标记(您显然不想要)。

因此,您可以将选项添加solid到您的,或者您可以仅使用两个命令mark options更优雅地解决整个问题:addplot

\addplot [
        data cs=polarrad,
        mark=o,
        only marks,
        samples=8,
        domain=0:14*pi/8
    ] {0.9564};

0将在角度和之间等距位置绘制八个空心圆14*pi/8。由于我没有使用\addplot +,线条样式将自动设置为black, solid(这是 TikZ 默认设置)。可以使用类似的绘图命令来绘制星号。

还要注意,你不必xtick明确提供整个列表。你可以这样说xtick={0,45,...,315}:前两个条目决定列表的起点和增量,最后一个条目决定结束。

\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{polar}

\begin{document}


\begin{tikzpicture}
\begin{polaraxis}[enlargelimits=false,
ytick={1},
yticklabels={},
xtick={0,45,...,360},
every outer x axis line/.append style={transparent},
every outer y axis line/.append style={transparent},
xticklabels={0,
$\frac{2\pi}{8}$,
$\frac{4\pi}{8}$,
$\frac{6\pi}{8}$,
$\frac{8\pi}{8}$,
$\frac{10\pi}{8}$,
$\frac{12\pi}{8}$,
$\frac{14\pi}{8}$},
]
    \addplot [
        data cs=polarrad,
        mark=o,
        only marks,
        samples=8,
        domain=0:14*pi/8
    ] {0.9564};

    \addplot [
        data cs=polarrad,
        mark=asterisk,
        only marks,
        samples=8,
        domain=0:14*pi/8
    ] {2-0.9564};
\end{polaraxis}
\end{tikzpicture}


\end{document}

答案2

您可以使用only marks选项将所有坐标放在一个\addplot命令中。

\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{polar}
\begin{document}
\begin{tikzpicture}
\begin{polaraxis}[enlargelimits=false, % axis x line = bottom, axis y line=right,
% height=5cm, width=5cm, 
ytick={1}, %axis y line*=none, 
yticklabels={},
xtick={0,45,90,135,180,225,270,315,360},
%xticklabels={},
%separate axis lines=true,
every outer x axis line/.append style={color=red, opacity=0, fill opacity=0},
every outer y axis line/.append style={color=red, opacity=0, fill opacity=0},
xticklabels={0,
$\frac{2\pi}{8}$,
$\frac{4\pi}{8}$,
$\frac{6\pi}{8}$,
$\frac{8\pi}{8}$,
$\frac{10\pi}{8}$,
$\frac{12\pi}{8}$,
$\frac{14\pi}{8}$}
]
\addplot+[data cs=polarrad,only marks, mark options={color=black, mark=o}] coordinates{
(0,0.9564) 
(2*pi/8,0.9564) 
(4*pi/8,0.9564) 
(6*pi/8,0.9564)
(8*pi/8,0.9564)
(10*pi/8,0.9564)
(12*pi/8,0.9564) 
(14*pi/8,0.9564)};

\addplot+[data cs=polarrad,only marks, mark options={color=black, mark=asterisk}] coordinates{
(0,2-0.9564) 
(2*pi/8,2-0.9564) 
(4*pi/8,2-0.9564) 
(6*pi/8,2-0.9564) 
(8*pi/8,2-0.9564)
(10*pi/8,2-0.9564) 
(12*pi/8,2-0.9564) 
(14*pi/8,2-0.9564) 
(0,1)};
\end{polaraxis}
\end{tikzpicture}
\end{document}

答案3

我不知道你写的时候到底想要什么

由于我找不到任何标准方法来解决这个问题,

这是我的标准代码。有些注释,我忘了mark=*在这种情况下如何使用,并且有可能用宏来0代替打印数字。$\frac{0\pi}{8}$

更新绘制标记代码\draw plot[black, scale=2,mark=asterisk] coordinates {(0,0)};与库一起plotmarks

\documentclass[11pt]{scrartcl}
\usepackage{tikz}
\usetikzlibrary{%
  arrows,
  calc
}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}

\draw[gray] circle (4cm);
\foreach \x in {0,2,...,14} {%
\draw[gray,
     decoration={
     markings,
     mark= at position 0.82 with {\draw[black] circle (3pt);},
     mark= at position 0.95 with {\draw[black] (-3pt ,-3pt) -- ( 3pt,3pt)
                                         (3pt ,-3pt) -- (-3pt,3pt)
                                         (0   ,-3pt) -- (   0,3pt)
                                         (-3pt, 0)   -- ( 3pt,  0);}},
    postaction={decorate}
    ] (0,0) -- node[pos=1.1,text=black] {$\frac{\x\pi}{8}$}  (360/16*\x:4.5cm) ;
 }
\end{tikzpicture}
\end{document} 

在此处输入图片描述

答案4

我认为使用 pgfplots 就像用锤子打苍蝇一样

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[circle,minimum size=8cm,draw,thin](cercle) at (0,0){};
\foreach \tt in{ 2,4,6,8,10,12,14}{
\draw[thin] (0,0) -- (cercle.{\tt*22.5}) node[pos=1.1]{$\frac{\tt\cdot \pi}{8}$};
}
\draw[thin] (0,0) -- (cercle.{0}) node[pos=1.1]{$0$};
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容