pgfplots:标记大小相对于间隔大小

pgfplots:标记大小相对于间隔大小

我正在尝试创建一个ybar intervalpgf 图,其中水平线作为每个间隔/条形顶部的标记。间隔宽度由我的外部 CSV 数据文件指定。

我定义了自己的绘图标记(只是一个\draw (0,0) -- (1,0);),并尝试根据我绘制的每个间隔缩放其宽度。

我已经发现这个答案,其中作者使用了\thisrow,但就我而言,我收到一个错误:

!包 PGF 数学错误:未知函数“thisrow_unavailable_load_table_directly”(在“thisrow_unavailable_load_table_directly”中)。

pgfplots 文档(第 56 页)提到了这个错误:

参数 hcolumn namei 必须表示现有列或存在列别名的列(请参阅 PgfplotsTable 手册)。如果无法解析,数学解析器将产生“未知函数”错误消息。

我该如何修复/解决这个问题?

我的 MWE:

\documentclass{standalone}

\usepackage{filecontents}
\usepackage{pgfplots, pgfplotstable}

\begin{document}
\begin{tikzpicture}
\pgfdeclareplotmark{hr}{
    \draw (0,0) -- (1,0);
}

\begin{axis}[ymode=log,]
\addplot+[
    ybar interval,
    fill=cyan,
    draw=none,
    mark=hr,
    scatter,
    scatter src=explicit,
    visualization depends on=\thisrow{width}\as\intvWidth,
    scatter/@pre marker code/.append style={
        /tikz/mark width=\intvWidth
    },
] table [
    col sep=comma,
    create on use/xaccum/.style={
        create col/expr=\pgfmathaccuma+\prevrow{width}
    },
    x=xaccum, y=height,
] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}

我的 CSV 文件如下所示:

height,width
1,884
2,5768
3,835
4,2661
5,492
6,1349
7,486
8,1117
9,498
10,854
10,0

这是没有加宽标记的渲染(青色区域上方的蓝色规格现在是标记):
坏标记

答案1

除了缩放标记之外,使用绘图样式可能更容易jump mark left

\documentclass[border=5mm]{standalone}

\usepackage{filecontents}
\usepackage{pgfplots, pgfplotstable}

\begin{filecontents}{data.csv}
height,width
1,884
2,5768
3,835
4,2661
5,492
6,1349
7,486
8,1117
9,498
10,854
10,0
\end{filecontents}

\begin{document}
\begin{tikzpicture}
\pgfdeclareplotmark{hr}{
    \draw (0,0) -- (1,0);
}

\begin{axis}[ymode=log]
\addplot+[
    jump mark left, mark=none
] table [
    col sep=comma,
    create on use/xaccum/.style={
        create col/expr=\pgfmathaccuma+\prevrow{width}
    },
    x=xaccum, y=height,
] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容