如何防止 Tikz 网格内出现多余的 yticks?

如何防止 Tikz 网格内出现多余的 yticks?

我根据以下示例创建了一个漂亮的散点图http://www.dgsiegel.net/news/2011_12_05-creating_beautiful_graphics_with_pgfplots

我现在的问题是,为了展示所有的-ticks 的大小必须增加。这样做会产生 2 个额外的- 使用最后一个已知值进行标记。如下图所示:

坏蜱

该图的代码如下:

\begin{tikzpicture}
\begin{axis}[
  grid=major,
  point meta=explicit,
  xmin=0,
  xmax=10,
  xlabel=Cijfer,
  scatter/@pre marker code/.code={%
    \pgfmathparse{\pgfplotspointmetatransformed/1000*50+50}%
    \let\opacity=\pgfmathresult
    \pgfmathparse{\pgfplotspointmetatransformed/1000*7.5+1}%
    \def\markopts{mark=*, color=skyblue1!\opacity,%
    fill=skyblue1!\opacity, mark size=\pgfmathresult}%
    \expandafter\scope\expandafter[\markopts]
  },
  scatter/@post marker code/.code={\endscope},
  symbolic y coords={
    AlgemeneTevredenheid,
    Toegankelijkheid,
    TelBereikbaarheid,
    BereikbaarheidHelp,
    GebruiksvriendelijkheidHelp,
    Klantvriendelijkheid,
    ProbleemoplossendVermogen,
    Deskundigheid,
    Professionaliteit,
    Terugkoppeling,
    GebodenOplossing,
    ToepasbaarheidOplossing,
    NakomenAfspraken
  },
  xtick = {1,...,10},
  x=0.59cm,
  y=0.8545cm,
]
\addplot[only marks,scatter]
  table[x index=0, y index=1, meta index=2] {CijferDistributie.dat};
\end{axis}
\end{tikzpicture}

更改y=0.8545cm控制每条线的高度,如果减少太多则不会显示每个 y 轴刻度,如果增加则会增加额外的线。

我想展示每一个-勾选,但不包含额外的行。有人对这个问题有什么想法吗?

为了完整性,该CijferDistributie.dat文件如下所示:

Cijfer  Vraag   Aantal
1   AlgemeneTevredenheid    0
2   AlgemeneTevredenheid    0
3   AlgemeneTevredenheid    0

阿尔延

答案1

最简单的解决方案是添加ytick=data。然后您只会获得与表中数据条目相对应的行。或者,您可以指定yminymax并设置enlarge y limits=true

示例输出

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.9}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
  grid=major,
  point meta=explicit,
  xmin=0,
  xmax=10,
  xlabel=Cijfer,
  scatter/@pre marker code/.code={%
    \pgfmathparse{\pgfplotspointmetatransformed/1000*50+50}%
    \let\opacity=\pgfmathresult
    \pgfmathparse{\pgfplotspointmetatransformed/1000*7.5+1}%
    \def\markopts{mark=*, color=blue!\opacity,%
    fill=blue!\opacity, mark size=\pgfmathresult}%
    \expandafter\scope\expandafter[\markopts]
  },
  scatter/@post marker code/.code={\endscope},
  symbolic y coords={%
    AlgemeneTevredenheid,
    Toegankelijkheid,
    TelBereikbaarheid,
    BereikbaarheidHelp,
    GebruiksvriendelijkheidHelp,
    Klantvriendelijkheid,
    ProbleemoplossendVermogen,
    Deskundigheid,
    Professionaliteit,
    Terugkoppeling,
    GebodenOplossing,
    ToepasbaarheidOplossing,
    NakomenAfspraken%
  },
  xtick = {1,...,10},
  ytick=data,
  x=0.59cm,
  y=0.8cm,
]
\addplot[only marks,scatter]
  table[x index=0, y index=1, meta index=2] {CijferDistributie.dat};
\end{axis}

\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[
  grid=major,
  point meta=explicit,
  xmin=0,
  xmax=10,
  xlabel=Cijfer,
  scatter/@pre marker code/.code={%
    \pgfmathparse{\pgfplotspointmetatransformed/1000*50+50}%
    \let\opacity=\pgfmathresult
    \pgfmathparse{\pgfplotspointmetatransformed/1000*7.5+1}%
    \def\markopts{mark=*, color=blue!\opacity,%
    fill=blue!\opacity, mark size=\pgfmathresult}%
    \expandafter\scope\expandafter[\markopts]
  },
  scatter/@post marker code/.code={\endscope},
  symbolic y coords={%
    AlgemeneTevredenheid,
    Toegankelijkheid,
    TelBereikbaarheid,
    BereikbaarheidHelp,
    GebruiksvriendelijkheidHelp,
    Klantvriendelijkheid,
    ProbleemoplossendVermogen,
    Deskundigheid,
    Professionaliteit,
    Terugkoppeling,
    GebodenOplossing,
    ToepasbaarheidOplossing,
    NakomenAfspraken%
  },
  xtick = {1,...,10},
  ymin=AlgemeneTevredenheid,
  ymax=NakomenAfspraken,
  enlarge y limits=true,
  x=0.59cm,
  y=0.8cm,
]
\addplot[only marks,scatter]
  table[x index=0, y index=1, meta index=2] {CijferDistributie.dat};
\end{axis}

\end{tikzpicture}

\end{document}

相关内容