pgfplot 中不可见的多个元素

pgfplot 中不可见的多个元素

我在正确使用 pgfplot 时遇到了一些问题。我对 pgfplots 经验不多,在线教程和 pgfplots 手册都无法帮助我。我想要创建的图是一个包含三个不同图的条形图。第一个图仅应具有 x = 1 的 y 值,其他两个图仅应具有 2 <= x <= 32 的 y 值。我当前的 tex 代码(带有虚拟 y 值)如下:

\begin{tikzpicture}
    \begin{axis}[
            xlabel=x,
            ylabel=y,
            symbolic x coords={1,2,4,8,16,32},
            xtick=data,
            enlargelimits=0.05,
            legend pos=north east,
            ybar interval=0.7,
            ymajorgrids=true,
            y grid style=dashed,
        ]
        
        % A
        \addplot coordinates {
            (1,6)
        };
            
        % B
        \addplot coordinates {
            (2,5) (4,4) (8,3) (16,2) (32,1)
        };
            
        % C
        \addplot coordinates {
            (2,5) (4,4) (8,3) (16,2) (32,1)
        };
            
        \legend{A,B,C}
    \end{axis}
\end{tikzpicture}

此代码生成如下图所示的图表: 阴谋

现在,这个情节存在一些问题,我不知道如何解决。

  1. x 轴上没有可见的值
  2. “A”图不可见
  3. x = 32 的图完全缺失

非常感谢您的帮助!

答案1

其中大部分都与您选择使用ybar interval而不是相关联ybar,而这才是您应该使用的。间隔类型条形图的目的是坐标定义条形的宽度和高度。如果您有两个坐标(1,5)(3,2),则得到条,宽度为 2,高度为 5。pgfplots有关更多详细信息,请参阅手册。

这显然不是您想要做的,因此,首先要做的就是更改ybar intervalybar

此外,请注意,xtick=data只需要第一的 \addplot考虑到这一点,并且您的情况中第一个图只有一个 x 值,并且您只会在第一组条形中得到一个勾号。因此删除xtick=data

在此处输入图片描述

\documentclass[border=0.2cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
 \begin{tikzpicture}
    \begin{axis}[
            xlabel=x,
            ylabel=y,
            symbolic x coords={1,2,4,8,16,32},
            ytick distance=1, % <-- added
            enlarge x limits={0.15}, % <-- increased value
            legend pos=north east,
            ybar=0.7, % <-- no interval
            ymajorgrids=true,
            y grid style=dashed,
            ymin=0
        ]
        
        % A
        \addplot coordinates {
            (1,6)
        };
            
        % B
        \addplot coordinates {
            (2,5) (4,4) (8,3) (16,2) (32,1)
        };
            
        % C
        \addplot coordinates {
            (2,5) (4,4) (8,3) (16,2) (32,1)
        };
            
        \legend{A,B,C}
    \end{axis}
\end{tikzpicture}
\end{document}

相关内容