我目前正在尝试可视化一些数据,但很难找到合理的可视化方法。请考虑以下代码:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.14}
\begin{document}
\pgfplotstableread{SM Hgg Azz
1.41421353816986083984375 1.41421353816986083984375 0
1.41421353816986083984375 1.41421353816986083984375 4.98557376861572265625
1.41421353816986083984375 1.41421353816986083984375 -4.98557376861572265625
}\hzzsamplesGood
\pgfplotstableread{SM Hgg Azz
1.41421353816986083984375 1.41421353816986083984375 7.07106781005859375
1.41421353816986083984375 1.41421353816986083984375 14.1421356201171875
1.41421353816986083984375 1.41421353816986083984375 21.21320343017578125
}\hzzsamplesBad
\pgfplotstableread{SM Hgg Azz
1.436501979827880859375 1.39018142223358154296875 -1.83572733402252197265625
}\hzzsamplesVal
\begin{tikzpicture}
\begin{axis}[%
ymin=-10,ymax=25,%
]
\addplot3[color=blue ,mark=*,draw=none] table[y=Azz,x=SM,z=Hgg] {\hzzsamplesGood};
\addplot3[color=red ,mark=*,draw=none] table[y=Azz,x=SM,z=Hgg] {\hzzsamplesBad};
\addplot3[color=green,mark=*,draw=none] table[y=Azz,x=SM,z=Hgg] {\hzzsamplesVal};
\end{axis}
\end{tikzpicture}
\end{document}
得出以下图表
good
如您所见,蓝色 ( ) 和红色 ( )中的两行数据bad
在三个坐标中的两个上对齐。原则上,这将需要一个一维图,仅显示此坐标(中甚至有这样的事情吗pgfplots
?)
但是,第三个绿色“数据行”仅仅是一个点(val
),其三个坐标都与另外两个点不同。
我想知道如何最好地将其形象化,因为默认情节(如上所示)不能很好地引导眼睛看到这一事实。
我的第一个尝试是移动 y 轴的位置,使其跟随两行数据 - 但我不知道如何将轴定位在某个特定坐标上。有办法吗?
我也尝试自己绘制轴,通过使用axis lines=none
和添加
\addplot3[->,domain=-10:25,black] ({sqrt(2)},x,{sqrt(2)}) node[right] {$\kappa_{SM}=\kappa_{Hgg}=\sqrt{2}$};
结果是
正如你所见,这远非完美:
- 标签被裁剪。
- 我不知道如何在自己绘制的轴上添加刻度。
最重要的是,我不知道这是否是一个明智的策略。
你能教我如何将轴移动到我想要的坐标,或者自己画一个看起来像真实轴的东西吗?
如果您对如何以更有意义的方式可视化这些数据有其他想法,也请随时发表评论。
答案1
我现在想出了一个解决方案,完全放弃 pgfplots,而是使用 Stefan 的“1D”情节建议。
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{decorations.markings,arrows}
\pgfplotsset{compat=1.14}
\begin{document}
\newcommand\SM{\textrm{SM}}
\tikzset{
point/.style={draw,shape=circle,fill,minimum size=3pt,inner sep=0pt}
}
\begin{tikzpicture}[x=.4cm,y=4cm]
\pgfmathsetmacro{\angleA}{-170}
\pgfmathsetmacro{\angleB}{90}
\pgfmathsetmacro{\yscale}{3}
\pgfmathsetmacro{\zscale}{1.5}
\pgfmathsetmacro{\ticklength}{0.02}
\draw[->] (-6.5,0) -- (22,0) node[pos=0.6,above=.5em,scale=0.6] {$\kappa_{\SM}=\kappa_{Hgg}=\sqrt{2}$} node[pos=1.0,right] {$\kappa_{Azz}$};
\foreach \kAzz in {-6,-3,...,21}{
\draw (\kAzz,\ticklength) -- (\kAzz,-\ticklength) node [below,scale=0.7] {\kAzz};
}
\node at (0,0) [above=.5em,scale=0.6]{\SM};
\foreach \kAzz in {4.98557376861572265625, 0, -4.98557376861572265625}{
\coordinate[red,point] () at (\kAzz,0);
}
\foreach \kAzz in {7.07106781005859375,14.1421356201171875,21.21320343017578125}{
\coordinate[blue,point] () at (\kAzz,0);
}
\coordinate (valx) at (-1.83572733402252197265625,0);
\draw[dashed,->] (valx) -- ++(\angleA:0.3*\yscale) node[right,anchor=north west] {$\kappa_{\SM}$};
\draw[dashed,postaction={decorate},decoration={markings,mark=at position .55 with {\arrow{<}}}] (valx) -- ++(\angleB:0.3*\zscale) node[above] {$\kappa_{Hgg}$};
\draw (valx) -- ++(\angleA:\yscale*0.1575) --++ (\angleB:\zscale*0.17) coordinate [black,point] (val)
node[above,anchor=south east,text width=3cm,align=right,scale=0.6] {$\kappa_{\SM}\nearrow 1.575\%$\\$\kappa_{Hgg}\searrow 1.700\%$};
\end{tikzpicture}
\end{document}