如何制作具有对数 x 轴且条形之间没有空白的水平 pgfplots 条形图?

如何制作具有对数 x 轴且条形之间没有空白的水平 pgfplots 条形图?

遗憾的是,我对图形的想法与我目前能够使用tikz和制作的图形之间存在一些(轻描淡写)不一致pgfplots。我想制作一个看起来像这样的图形

在此处输入图片描述

然而我对它的了解有限tikzpgfplots只能让我想出这个(我提前道歉)可怕的 MWE:

\documentclass{standalone}
\usepackage{pgfplots}
    \pgfplotsset{compat=1.17}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xbar=0pt,
        enlargelimits=0.15,
        width=.9\textwidth,
        label style={font=\footnotesize},
        ytick={0,...,3},
        yticklabels = {AA, BB, CC},
        ytick=data,
        every axis plot/.append style={fill},
        y = 0.4cm,
        xmode=log,log basis x=10,
        xbar stacked,
        axis on top
    ]
        \addplot coordinates {(3000, 0) (832, 1) (1E7, 2)};
    \end{axis}
\end{tikzpicture}
\end{document}

我经历了文档pgfplots找不到类似的东西作为起点,很快就变得畏惧。

有谁可以引导一个可怜的灵魂吗?

答案1

这个图用 Ti 画起来可能更容易Z,但如果你想使用pgfplots,这也许可以作为一个起点(灵感来自这个答案):

\documentclass[border=2mm]{standalone}

\usepackage{pgfplotstable}
\pgfplotsset{compat=1.18}

\begin{document}%
\begin{tikzpicture}

    \pgfplotstableread{
        Label Start  Stop
        1     600    60000 
        2     1      3000 
        3     1e5    1e7 
    }\datatable

    \pgfplotsset{
      every axis/.style={
        width=.9\textwidth,
        y=0.4cm,
        bar width=0.4cm,
        enlarge y limits=0.25,
        label style={font=\footnotesize},
        axis on top,
        xbar stacked,
        xmin=1, xmax=1e7,
        xmode=log, 
        ytick={1,...,3},
        yticklabels={CC, BB, AA},
        ytick style={draw=none},
        extra y ticks={1.5,2.5},
        extra y tick labels={},
        extra y tick style={grid=minor},
        minor tick style={draw=none},
        xlabel={FREQUENCY (Hz)},
        clip=false,
      },
      minimum/.style={forget plot, draw=none, fill=none},
    }

  \begin{axis}
    \draw [<->, thick] (axis cs:1,3.5) -- (axis cs:1e2,3.5) node [midway,above, font=\footnotesize] {XXX};
    \draw [<->, thick] (axis cs:1e3,3.5) -- (axis cs:1.5e4,3.5) node [midway,above, font=\footnotesize] {YYY};
    \draw [<->, thick] (axis cs:1e5,3.5) -- (axis cs:1e7,3.5) node [midway,above, font=\footnotesize] {ZZZ};
    \addplot [minimum] table [x=Start, y=Label] {\datatable};
    \addplot table [y=Label, x expr=\thisrowno{2}-\thisrowno{1}] {\datatable};
  \end{axis}
  
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容