我正在尝试创建一个图表,其中 tikz 标记的标签不应该是数字而是字符串,有没有一种(简单的)方法可以通过 tikz-datavisualisation 实现这一点?
我要去的地方的模型:
请注意,tikz 已贴上名称标签。我不知道如何解决的另一个问题是如何仅在提供数据的地方设置标记。
我提供的示例数据:
alpha 2 3
hotel 3 6
uniform 1 7
我目前拥有的:
\documentclass{article}
\usepackage{tikz}
\usepackage[margin=0cm,nohead]{geometry}
\usepackage[active,tightpage]{preview}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} %input encoding
\usetikzlibrary{datavisualization}
\PreviewEnvironment{tikzpicture}
\begin{document}
\begin{tikzpicture}
\pgfdeclaredataformat{cacheConfigs}%
{}{}{#1 #2 #3}
{%
\pgfkeys{/data point/.cd, x=#1, y=#2, set=1} \pgfdatapoint
\pgfkeys{/data point/.cd, x=#1, y=#3, set=2} \pgfdatapoint
}{}{}
\datavisualization [scientific axes=clean, %y axis=grid,
style sheet=vary dashing,
visualize as line/.list={1,2}]
data[format=cacheConfigs] {
1 2 3
2 3 6
3 1 7
};
\end{tikzpicture}
\end{document}
答案1
好吧,这里有一种方法可以做到这一点:我们可以将标签存储在列表宏中,并根据简单的计数器为数据点分配一个 x 值。为了打印标签,我们然后为给定的 x 位置挑选相应的列表条目。要仅在我们也有数据的刻度标记,您可以设置x axis={ticks={step=1}}
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{datavisualization}
\begin{document}
\begin{tikzpicture}
\makeatletter
\def\ticksfromlabellist#1{%
\pgfmathparse{{\label@list}[#1]}%
\pgfmathresult%
}
\pgfdeclaredataformat{cacheConfigs}%
{} % No catcode changes
{\@tempcnta=1 \xdef\label@list{}} % Initialise count and label list
{#1 #2 #3} % Argument format
{%
\xdef\label@list{\label@list,"#1"} % Append label to list
\pgfkeys{/data point/.cd, x=\the\@tempcnta, y=#2, set=1} \pgfdatapoint % Store data point, with count as x
\pgfkeys{/data point/.cd, x=\the\@tempcnta, y=#3, set=2} \pgfdatapoint
\advance\@tempcnta 1\relax % Step the count
}{}{}
\makeatother
\datavisualization [
scientific axes=clean,
style sheet=vary dashing,
visualize as line/.list={1,2},
x axis={
ticks={
step=1,
tick typesetter/.code=\ticksfromlabellist{##1},
style={text height=1ex} % For proper vertical alignment
}
}
] data [format=cacheConfigs] {
a 2 3
b 3 6
c 1 7
};
\end{tikzpicture}
\end{document}