我正在尝试在 LaTeX 中创建二维图。我面临两个问题:
我正在使用该
ocg
包通过单击图例来显示/消失图表。它部分因为图中的标记不会消失,所以可以正常工作。知道为什么会发生这种情况吗?我想让图表更具描述性,因此单击某个位置可以为其提供更多信息。例如,在当前代码中,如果我将鼠标移到“A”上,它会使用 pdftooltips 给出关于它的描述。我在给定的情况下使用“A”的坐标位置,但我能否获得图表本身的类似解释,假设如果我用方形标记指向图表上的任意位置,它应该可以解释它。
这是我所拥有的一个工作示例。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\usetikzlibrary{pgfplots.groupplots}
\usetikzlibrary{backgrounds,fit,calc,shadows,chains,ocgx,shapes.geometric}
\usepackage{scalefnt}
\usepackage{pdfcomment}
\usepackage{ocgx}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\pgfplotsset{compat=1.5,samples=10}
\pgfplotsset{every axis legend/.append style={scale=8}}
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}%
\newcommand*\rfrac[2]{{}^{#1}\!/_{#2}}
\newcommand*{\Peak}{18}
% The data files, written on the first run.
\begin{filecontents}{in1.data}
Granularity Speedup
16 0.71
32 0.72
64 0.75
128 0.80
256 0.89
512 1.08
1024 1.44
2048 2.10
4096 3.23
\end{filecontents}
\begin{filecontents}{in2.data}
Granularity Speedup
16 0.71
32 0.73
64 0.75
128 0.80
256 0.90
512 1.10
1024 1.50
2048 2.28
4096 3.80
\end{filecontents}
\begin{document}
\begin{center}
\tikzset{every mark/.append style={scale=2}}
\begin{tikzpicture}
\begin{loglogaxis}[
height=10cm, width=20cm,
axis lines=left,
xlabel={Granularity (Bytes)},
ylabel= {Speedup},
xmin=8,
xmax=8192,
xtick={16,32,64,128,256,512,1024,2048,4096,8192},
xticklabels={16,,,128,,,1K,,,8K,},
ymin=0.1,
ymax=100,
ytick={0.1,1,10,100},
yticklabels={0.1,1,10,100},
ymajorgrids,
legend entries={\switchocg{actual}{LogCA},\switchocg{A}{$A_{10x}$}},
legend columns=-1,
legend style={at={(0.8,-0.4)},font=\Huge},
xticklabel style={
rotate=37,},
]
\begin{scope}[ocg={ref=actual,status=visible}]
\addplot [black,solid,very thick] table {in1.data};
\end{scope}
\begin{scope}[ocg={ref=A,status=visible}]
\addplot [mark=square] table {in2.data};
\end{scope}
\node(source1) at (axis cs:0,\Peak){};
\node(destination1) at (axis cs:67108864,\Peak){};
\draw[-,very thick,red](source1)--(destination1);
\node[black,above] (c) at (axis cs:16,\Peak){A};
\draw (c) node {\pdftooltip{\rule{0pt}{5pt}\rule{5pt}{0pt}}{Hint: Peak Acceleration}};
\end{loglogaxis}
\end{tikzpicture}
\end{center}
\end{document}
答案1
这适用于较新版本的
pgfplots
。您有两种解决方案:(1)升级到合适的版本pgfplots
或(2)添加clip marker paths
到axis
(此功能会导致标记的特殊绘图层混淆 OCG)。您可能想看一下
clickable
随附的库pgfplots
,它允许使用内置方法添加交互式图表。其主要功能包括- 单击某处会弹出一个窗口,其中显示鼠标光标下方的坐标
- 单击坐标即可显示有关相关数据点的可自定义元数据(这是最接近“绘图元数据”的内置功能)
- 拖放显示起点和终点和两者之间的直线的斜率
结果如下clickable
:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\usetikzlibrary{pgfplots.groupplots}
\usetikzlibrary{backgrounds,fit,calc,shadows,chains,ocgx,shapes.geometric}
\usepackage{scalefnt}
\usepackage{pdfcomment}
\usepackage{ocgx}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\usepgfplotslibrary{clickable}
\pgfplotsset{compat=1.5,samples=10}
\pgfplotsset{every axis legend/.append style={scale=8}}
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}%
\newcommand*\rfrac[2]{{}^{#1}\!/_{#2}}
\newcommand*{\Peak}{18}
% The data files, written on the first run.
\begin{filecontents}{in1.data}
Granularity Speedup
16 0.71
32 0.72
64 0.75
128 0.80
256 0.89
512 1.08
1024 1.44
2048 2.10
4096 3.23
\end{filecontents}
\begin{filecontents}{in2.data}
Granularity Speedup
16 0.71
32 0.73
64 0.75
128 0.80
256 0.90
512 1.10
1024 1.50
2048 2.28
4096 3.80
\end{filecontents}
\begin{document}
\begin{center}
\tikzset{every mark/.append style={scale=2}}
\begin{tikzpicture}
\begin{loglogaxis}[
height=10cm, width=20cm,
axis lines=left,
xlabel={Granularity (Bytes)},
ylabel= {Speedup},
xmin=8,
xmax=8192,
xtick={16,32,64,128,256,512,1024,2048,4096,8192},
xticklabels={16,,,128,,,1K,,,8K,},
ymin=0.1,
ymax=100,
ytick={0.1,1,10,100},
yticklabels={0.1,1,10,100},
ymajorgrids,
legend entries={\switchocg{actual}{LogCA},\switchocg{A}{$A_{10x}$}},
legend columns=-1,
legend style={at={(0.8,-0.4)},font=\Huge},
xticklabel style={
rotate=37,},
]
\begin{scope}[ocg={ref=actual,status=visible}]
\addplot [black,solid,very thick,
clickable coords={in1 (xy)}] table {in1.data};
\end{scope}
\begin{scope}[ocg={ref=A,status=visible}]
\addplot [mark=square,
clickable coords={in2 (xy)}] table {in2.data};
\end{scope}
\node(source1) at (axis cs:0,\Peak){};
\node(destination1) at (axis cs:67108864,\Peak){};
\draw[-,very thick,red](source1)--(destination1);
\node[black,above] (c) at (axis cs:16,\Peak){A};
\draw (c) node {\pdftooltip{\rule{0pt}{5pt}\rule{5pt}{0pt}}{Hint: Peak Acceleration}};
\end{loglogaxis}
\end{tikzpicture}
\end{center}
\end{document}
单击数据点in2.dat
扩展参数clickable coords={in2 (xy)}
:
同样适用于in1.dat
-- 但由于没有标记,因此更加棘手:
单击轴上的某处:
拖放即可显示斜率:
该clickable
库具有特殊的运行时要求,因为它需要 LaTeX 包insdljs
和eforms
,并且我相信这些库在过去的某个时候已经变为非自由的。我的系统上仍然有一些旧的免费版本的这些库,我承认我不确定它们是否仍然是 TeX 发行版的一部分。