定义自定义轴

定义自定义轴

我目前正在尝试可视化一些数据,但很难找到合理的可视化方法。请考虑以下代码:

\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}

解决方案

相关内容