我有一个 pgfplot,它应该只给我一个颜色条,没有其他图。我的代码灵感来自这个问题。对数色条代码来自这个答案和这个答案。
我得到的结果是一尊重:我想要 10 的所有幂的刻度,写成 ( 10^n
)而不是普通的小数。另外,我不希望1*
在刻度前面出现多余的数字(就像现在的 10^5 一样)。
我迄今为止的输出(请执行故障渲染):
我的 MWE:
\documentclass{standalone}
\usepackage{filecontents}
\usepackage{pgfplots, pgfplotstable}
\begin{filecontents}{data.csv}
height,width
1,2
205241,3
205241,0
\end{filecontents}
% Define new pgfmath function for the logarithm
% to base 10 that also works with fpu library
\pgfmathdeclarefunction{lg10}{1}{%
\pgfmathparse{ln(#1)/ln(10)}%
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ymode=log,
enlargelimits=false,
hide axis,
scale only axis,
height=0,
width=0,
colorbar horizontal,
colorbar style={
width=10cm,
xtick={0,1,2,3,4,5},
xticklabel={
\pgfkeys{/pgf/fpu}
\pgfmathparse{10^\tick}\pgfmathprintnumber\pgfmathresult
\pgfkeys{/pgf/fpu=false}
},
},
]
\addplot [
mesh,
draw=none,
point meta=explicit, % use the "meta expr" defined below
] table [
col sep=comma,
create on use/xaccum/.style={
create col/expr=\pgfmathaccuma+\prevrow{width}
},
meta expr=lg10(\thisrow{height}), % transform "order" into "linear" for colorbar
x=xaccum, y=height,
] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
颜色栏中的宏\tick
已经包含指数,因此您只需使用xticklabel=$10^{\pgfmathprintnumber{\tick}}$
:
\documentclass[border=5mm]{standalone}
\usepackage{filecontents}
\usepackage{pgfplots, pgfplotstable}
\begin{filecontents}{data.csv}
height,width
1,2
205241,3
205241,0
\end{filecontents}
% Define new pgfmath function for the logarithm
% to base 10 that also works with fpu library
\pgfmathdeclarefunction{lg10}{1}{%
\pgfmathparse{ln(#1)/ln(10)}%
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
enlargelimits=false,
hide axis,
scale only axis,
height=0,
width=0,
colorbar horizontal,
colorbar style={
width=10cm,
xtick={0,1,...,6},
xticklabel=$10^{\pgfmathprintnumber{\tick}}$
},
]
\addplot [
mesh,
draw=none,
point meta=explicit
] table [
col sep=comma,
create on use/xaccum/.style={
create col/expr=\pgfmathaccuma+\prevrow{width}
},
x=xaccum, y=height,
meta expr=lg10(\thisrow{height})
] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}