размер метки зависит от значения y или переменной

размер метки зависит от значения y или переменной

Я хочу сделать диаграмму рассеяния и варьировать ее mark sizeв зависимости от переменной. Кроме того, я хочу, чтобы цвет метки зависел от метазначения, указанного в файле (что работает в данном коде). Например, я хочу нелинейную зависимость, например mark size = sqrt(y value of point), или, в качестве альтернативы, использовать переменную из цикла for. Поскольку размер метки, похоже, ожидает длину, я просто не могу найти способ сделать некоторые вычисления, так как мои попытки с \pgfmathresultнекоторыми \edef...макросами не увенчались успехом.

Мне удалось изменить размер знака с помощью кода

scatter/@pre marker code/.style={/tikz/mark size={4-\pgfkeysvalueof{/data point/y}/4}},%\pgfmathparse{1}\pgfmathresult},
scatter/@post marker code/.style={}

Однако в этом случае теряется цветовая привязка к метазначению.

\documentclass[tikz, border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{plotmarks}
\usepackage{amsmath}
\usepackage{filecontents}

\begin{filecontents*}{temp.dat}
1   1   100
2   2   200
3   3   300
4   4   400
5   5   500
6   6   600
7   7   700
8   8   800
9   9   900
10  10  1000
\end{filecontents*}
\begin{document}
\begin{tikzpicture}

\begin{axis}[%
    width=4.5in,
    height=3.5in,
    scale only axis,
    xmin=0,
    xmax=10,
    ymin=0,
    ymax=10,
    axis x line*=bottom,
    axis y line*=left,
    colorbar
]

\addplot[%
    scatter=true,
    only marks,
    mark=*,
    color=blue,
    point meta=explicit symbolic,
    %scatter/@pre marker code/.style={/tikz/mark size= f (yvalue)?},
    %scatter/@post marker code/.style={}
] table [meta index=2] {temp.dat};
\end{axis}
\end{tikzpicture}%
\end{document}

Пример кода скопирован отсюда:Как сохранить тот же цвет метки при использовании метаданных для размера маркера?

решение1

Редактировать:

Я обнаружил некоторые проблемы с моим первым представленным ответом. Я думал, что проблема была в отсутствии, \usepackage{filecontents}но, как указал Джейк, это не должно иметь значения. Несмотря на это, я добавил второе решение, в котором размер отметки и шкала цветовой шкалы фактически представляют значение y.

\documentclass[tikz, border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{plotmarks}
\usepackage{amsmath}
\usepackage{filecontents}

\begin{filecontents*}{temp.dat}
x   y
1   1
2   4
3   9
4   16
5   25
6   36
7   49
8   64
9   81
10  100
\end{filecontents*}

\begin{document}
\pgfplotstableread{temp.dat}{\tempdat}
\begin{tikzpicture}

\begin{axis}[%
    width=4.5in,
    height=3.5in,
    scale only axis,
    xmin=0,
    xmax=10,
    ymin=0,
    axis x line*=bottom,
    axis y line*=left,
    colorbar
]
\addplot[%
    scatter=true,
    only marks,
    mark=*,
    color=blue,
    visualization depends on = {y/2 \as \perpointmarksize},
    scatter/@pre marker code/.append style={/tikz/mark size=\perpointmarksize},
] table [x={x},y={y}] {\tempdat};
\end{axis}
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Оригинальный ответ:

Это сработает, если вы замените закомментированные строки следующим (см. раздел 4.25 в руководстве):

visualization depends on = {y \as \perpointmarksize},
scatter/@pre marker code/.append style={/tikz/mark size=\perpointmarksize},

Полный код:

\documentclass[tikz, border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{plotmarks}
\usepackage{amsmath}

\begin{filecontents*}{temp.dat}
1   1   100
2   2   200
3   3   300
4   4   400
5   5   500
6   6   600
7   7   700
8   8   800
9   9   900
10  10  1000
\end{filecontents*}
\begin{document}
\begin{tikzpicture}

\begin{axis}[%
    width=4.5in,
    height=3.5in,
    scale only axis,
    xmin=0,
    xmax=10,
    ymin=0,
    ymax=10,
    axis x line*=bottom,
    axis y line*=left,
    colorbar
]

\addplot[%
    scatter=true,
    only marks,
    mark=*,
    color=blue,
    point meta=explicit symbolic,
    visualization depends on = {y \as \perpointmarksize},
    scatter/@pre marker code/.append style={/tikz/mark size=\perpointmarksize},
] table [meta index=2] {temp.dat};
\end{axis}
\end{tikzpicture}%
\end{document}

введите описание изображения здесь

Связанный контент