使用 PGFPlots 构建二维极坐标直方图

使用 PGFPlots 构建二维极坐标直方图

当我读到报纸时遗传算法雅各布斯等人./太空研究的进展68(2021), 746--761中,我发现了这样一张有趣的图:

在此处输入图片描述

我们称之为二维极坐标直方图。(也许它有更合适的名字?)

我的问题是:我可以用 PGFPlots 绘制这种二维极坐标直方图吗?


我正在尝试寻找其他绘图方法。我找到了一种使用 Python 进行绘图的方案,它这里。不幸的是,它有一点点 bug。

答案1

以下答案使用轮图包,是我写的。

有一个 for 循环遍历切片。这里,每个切片有 3 个数字,分别表示角度、半径和值。

每个切片由单独的 绘制\wheelchart

半径用函数解释\WCdefradius。值决定颜色。角度决定切片的起始角度。

在此处输入图片描述

\documentclass[border=6pt,dvipsnames]{standalone}
\usepackage{listofitems}
\readlist\WCcolors{MidnightBlue,Cyan,Green,Yellow,Orange,Red}
\usepackage{wheelchart}
\begin{document}
\begin{tikzpicture}[scale=0.1]
\def\a{30}
\def\r{10}
\def\WCdefradius#1{\fpeval{trunc(#1/\r,0)*\r}}
\foreach\angle/\radius/\value in {
  4/2.9/180,2/11/90,21/25/48,1/31/7,25/53/0,
  34/2.9/43,32/11/90,51/25/9,31/31/11,59/49/4,
  64/2.9/91,62/11/36,81/25/81,89/49/7,85/53/3,
  94/2.9/180,92/11/90,91/31/7,119/49/4,115/53/0,
  124/2.9/123,122/11/90,141/25/9,121/31/11,
  154/2.9/92,152/11/203,171/25/81,151/31/7,
  184/2.9/180,182/11/90,201/25/48,181/31/7,205/53/0,
  214/2.9/43,212/11/90,231/25/9,211/31/11,239/49/4,
  244/2.9/91,242/11/36,261/25/81,269/49/4,265/53/0,
  274/2.9/180,272/11/90,271/31/7,299/49/4,295/53/0,
  304/2.9/123,302/11/90,301/25/108,301/31/11,
  334/2.9/92,332/11/36,351/25/81,331/31/7
}{
\wheelchart[
  counterclockwise,
  data=,
  radius={\WCdefradius{\radius}}{\WCdefradius{\radius}+\r},
  slices style={
    /utils/exec={
      \pgfmathparse{
        \value<1?1:
        (\value<5?2:
        (\value<10?3:
        (\value<50?4:
        (\value<100?5:
        6
        ))))
      }
    },
    \WCcolors[\pgfmathresult]
  },
  start angle={int(\angle/\a)*\a},
  total angle=\a,
  value=1
]{\angle/\radius/\value}
}
\draw (0,0) circle[radius={6*\r}];
\end{tikzpicture}
\end{document}

答案2

\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepgfplotslibrary{polar}
\begin{document}
\begin{tikzpicture}
\begin{polaraxis}[
xmin=0, xmax=360,
ymin=0, ymax=1,
xtick distance=45,
axis on top,
colormap/jet,
]
\addplot3[
surf,
domain=0:360, samples=37,
domain y=0:1, samples y=40,
x filter/.expression={rnd^2*y>0.5?nan:x},
unbounded coords=jump,
] {-y*(sin(3*x)+rnd)};
\end{polaraxis}
\end{tikzpicture}
\end{document}

缺少色块的极地色环

编辑:使用surf, shader=flat,和其他测试功能:

缺少色块的极地色环

相关内容