我正在尝试绘制一个零点极点图,用于某些滤波器设计。由于我找不到任何标准方法来实现这一点,我尝试使用 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}