Here's a style scale plot marks
that, if set to false
, will patch the \pgfuseplotmark
command to reset all transformations that don't influence the position (including scaling). The change is kept local.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\makeatletter
\tikzset{
scale plot marks/.is choice,
scale plot marks/false/.code={
\def\pgfuseplotmark##1{\pgftransformresetnontranslations\csname pgf@plot@mark@##1\endcsname}
},
scale plot marks/true/.style={},
scale plot marks/.default=true
}
\makeatother
\begin{document}
\begin{tikzpicture} [yscale=2]
\node [align=center, anchor=north] at (2,4) {\verb|scale plot marks=true|\\(default)};
\draw [very thin, lightgray] (0,0) grid (4,4);
\draw [cyan] plot [only marks, mark=square*,mark size=2.5pt] coordinates {(1,1) (2,3) (2.5,2)};
\end{tikzpicture}
\begin{tikzpicture} [yscale=2]
\node [align=center, anchor=north] at (2,4) {\verb|scale plot marks=false|};
\draw [very thin, lightgray] (0,0) grid (4,4);
\draw [cyan] plot [only marks, mark=square*,mark size=2.5pt,scale plot marks=false] coordinates {(1,1) (2,3) (2.5,2)};
\end{tikzpicture}
\end{document}
scale=2
as option somewhere in your\draw [cyan] plot [...]
statement (plot marks are drawn after the path as such; perhaps they reset parts of the transformation matrix)mark options={yscale=0.5}
.[yscale=2]
first and thenyscale=1/2
in theplot
options. The shape is fine but the coordinates are wrong.yscale=.5
in the options ofplot
but I forgotmark options={yscale=0.5}
. I prefer Jake's method but your idea is interesting. Perhaps you can transform your comment in an answer.