nschloe / tikzplotlib

:bar_chart: Save matplotlib figures as TikZ/PGFplots for smooth integration into LaTeX.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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?

Possibly related due to scatter flag inconsistencies: #480 #479