![LaTeX - PGF groupplot - 极轴](https://linux22.com/image/267776/LaTeX%20-%20PGF%20groupplot%20-%20%E6%9E%81%E8%BD%B4.png)
我找不到任何答案,是否可以绘制多个极坐标图的组图?如何绘制?对于分组,我使用pgf.groupplot
库,对于极坐标轴,我也使用\begin{polaraxis}
来自pgf
包。但它可以是另一个库或包。
我想要可视化 20 至 20.000 Hz 范围内每个三分之一倍频程的音频信号的极性分布特性
目标页面看起来应该类似于下图:
答案1
此解决方案从文件中读取数据。它让您选择一行中有多少个图以及如何缩放它们。但它不会跨页显示,因此对于这种数量的图,您应该使用浮动位置[p]
说明符:
代码
\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=1.8}
\usetikzlibrary{pgfplots.polar}
\usepackage{pgfplotstable}
\usepackage{xifthen}
\begin{document}
\pgfplotstableread{
ang f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 f17 f18 f19 f20 f21 f22 f23 f24 f25 f26 f27 f28 f29 f30
-90 0.5 0.46 0.62 0.95 0.33 0.43 0.58 0.42 0.28 0.51 0.87 0.49 0.55 0.25 0.64 0.11 0.09 0.74 0.19 0.64 0.15 0.77 0.61 0.05 0.3 0.57 0.69 0.46 0.24 0.4
-60 0.73 0.47 0.56 0.63 0.57 0.73 0.43 0.39 0.66 0.24 0.62 0.56 0.88 0.35 0.36 0.77 0.87 0.29 0.33 0.91 0.74 0.58 0.46 0.16 0.8 0.91 0.44 0.91 0.82 0.43
-30 0.41 0.33 0.71 0.88 0.56 0.33 0.59 0.22 0.01 0.27 0.1 0.25 0.35 0.59 0.02 0.23 0.26 0.76 0.22 0.78 0.15 0.97 0.59 0.77 0.85 0.18 0.51 0.09 0.96 0.1
0 0.07 0.33 0.29 0.04 0.66 0.1 0.19 0.43 0.7 0.84 0.87 0.14 0.41 0.43 0.23 0.66 0.1 0.74 0.77 0.51 0.05 0.08 0.7 0.65 0.76 0.18 0.07 0.32 0.56 0.36
30 0.59 0.17 0.24 0.29 0.26 0.72 0.46 0.68 0.47 0.52 0.42 0.85 0.07 0.84 0.31 0.29 0.39 0.64 0.3 0.73 0.07 0.58 0.3 0.45 0.83 0.2 0.63 0.23 0.45 0.41
60 0.46 0.15 1 0.11 0.15 0.35 0.91 0.48 0.4 0.5 0.25 0.52 0.67 0.34 0.67 0.7 0.33 0.03 0.16 0.74 0.58 0.38 0.56 0.28 0.4 0.94 0.32 0.64 0.86 0.09
90 0.84 0.42 0.01 0.49 0.73 0.88 0.35 0.58 0.11 0.09 0.73 0.45 0.58 0.96 0.62 0.8 0.94 0.99 0.63 0.82 0.53 0.63 0.58 0.4 0.56 0.33 0.24 0.51 0.06 0.52
}\polardata
\pgfmathtruncatemacro{\plotsperrow}{6}
\pgfmathsetmacro{\scalingfactor}{0.5}
\begin{figure}[p]
\foreach \x in {1,...,30}
{ \begin{tikzpicture}[scale=\scalingfactor]
\begin{polaraxis}[xmin=-90,xmax=90]
\addplot table
[ x=ang,
y=f\x,
] {\polardata};
\end{polaraxis}
\end{tikzpicture}
\pgfmathtruncatemacro{\mynewline}{mod(\x-1,\plotsperrow) == \plotsperrow -1 ? 1 : 0}
\ifthenelse{1 = \mynewline}{\\}{}
}
\caption{many bogus plots}
\end{figure}
\end{document}
输出
答案2
对于这种情况,我选择手动将图放置在tikzpicture
环境中作为最佳解决方案。源代码显示在此处,输出如下所示。
\begin{tikzpicture}[scale = 0.63]
\foreach \r in {0,1,2,3,4,5,6} {
\foreach \c in {0,1,2} {
\draw ({\c*6.5+0.5},{26-(\r+1)*4+0.5}) -- ({(\c+1)*6.5-0.5},{26-(\r+1)*4+0.5}); % x-axis
\draw ({(\c+1)*6.5-0.5},{26-(\r+1)*4+0.5}) arc (0:180:2.75); % y-axis
\foreach \a/\l in {30/60,60/30,90/0,120/-30,150/-60} { % angles
\draw[black!30] ({\c*6.5+3.25},{26-(\r+1)*4+0.5}) -- ({\c*6.5+3.25+2.75*cos(\a)},{26-(\r+1)*4+0.5+2.75*sin(\a)});
\draw ({\c*6.5+3.25+3*cos(\a)},{26-(\r+1)*4+0.5+3*sin(\a)}) node[scale=0.5] {\l°};
}
\foreach \b/\m in {0/0,0.25/20,0.5/40,0.75/60} { % dB
\draw[black!30] ({(\c+1)*6.5-3.25+2.75*\b},{26-(\r+1)*4+0.5}) arc (0:180:{2.75*\b});
\draw ({(\c+1)*6.5-3.05+2.75*\b},{26-(\r+1)*4+0.63}) node[scale=0.5] {\m};
}
\draw ({(\c+1)*6.5-3+2},{26-(\r+1)*4+0.27}) node[scale=0.5] {[dB]};
}
}
% those have to be placed manually [or I don't know the way to automatize it]
\coordinate[label=below:100 Hz] () at (3.25,22.6);
\draw (4.4,22.5) -- ...
\coordinate[label=below:125 Hz] () at (9.75,22.6);
\draw (11.1,22.5) -- ...
... and the other frequencies
\end{tikzpicture}