scatter plot ignores marker sizes
jgmakin opened this issue · comments
MWE:
This bit of code plots open circles of a fixed but non-default size:
import matplotlib.pyplot as plt
from tikzplotlib import get_tikz_code
max_marker_size = 300
fig, ax = plt.subplots()
ax.scatter(
[1, 2, 3], [5, 7, 1],
s=[max_marker_size]*3,
facecolors='none', edgecolors='black', linewidths=3.0
)
get_tikz_code()
but the tex
code it produces,
% This file was created by tikzplotlib v0.9.2.
\begin{tikzpicture}
\begin{axis}[
tick align=outside,
tick pos=left,
x grid style={white!69.0196078431373!black},
xmin=0.9, xmax=3.1,
xtick style={color=black},
y grid style={white!69.0196078431373!black},
ymin=0.7, ymax=7.3,
ytick style={color=black}
]
\addplot [only marks, mark=o, draw=black, colormap/viridis, visualization depends on={\thisrow{sizedata} \as\perpointmarksize}, scatter/@pre marker code/.append style={/tikz/mark size=\perpointmarksize}]
table{%
x y sizedata
1 5 9.7720502380584
2 7 9.7720502380584
3 1 9.7720502380584
};
\end{axis}
\end{tikzpicture}
does not use the size information to adjust the marks.
This can be remedied simply by pre-pending scatter
to the list of \addplot
options (see Sec. 4.5.12 of the pgfplots manual)--except that pgfplots
will then try to impose a color scheme as well. That can be fixed by changing .append style
to .style
in scatter/@pre marker code/.append style={/tikz/mark size=\perpointmarksize}
, and adding an empty post-marker: scatter/@post marker code/.style={}
. Hence, the working tex
code would be:
begin{tikzpicture}
\begin{axis}[
tick align=outside,
tick pos=left,
x grid style={white!69.0196078431373!black},
xmin=0.9, xmax=3.1,
xtick style={color=black},
y grid style={white!69.0196078431373!black},
ymin=0.7, ymax=7.3,
ytick style={color=black}
]
\addplot [
scatter,
only marks,
mark=o,
draw=black,
colormap/viridis,
visualization depends on={\thisrow{sizedata} \as\perpointmarksize},
scatter/@pre marker code/.style={/tikz/mark size=\perpointmarksize},
scatter/@post marker code/.style={}
]
table{%
x y sizedata
1 5 9.7720502380584
2 7 9.7720502380584
3 1 9.7720502380584
};
\end{axis}
\end{tikzpicture}
I can try to make the appropriate changes to tikzplotlib
myself (presumably somewhere around here), but I don't think I have a good enough handle on all the cases this bit of code is supposed to cover.
(I note in passing that linewidths=3.0
also appears to have no effect; perhaps I should open this as a separate issue.)
Can confirm the issue!
Does anyone have a workaround for this?