我正在尝试创建一个ybar interval
pgf 图,其中水平线作为每个间隔/条形顶部的标记。间隔宽度由我的外部 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}