Как можно использовать текущее значение цикла foreach для изменения ширины нарисованного объекта?

Как можно использовать текущее значение цикла foreach для изменения ширины нарисованного объекта?

Я хотел бы создать Tiкz plot, где вектор чисел используется для включения изображения. Я хочу, чтобы изображение масштабировалось с использованием текущего значения, так что изображения выше по , y-axisбыли больше, чем те, что с низкими значениями. Почему-то я всегда получаю ошибку«Недопустимая единица измерения (вставлена ​​pt)»при попытке использовать мою переменную в аргументе ширины. Вот что я сделал до сих пор:

\begin{tikzpicture}
\foreach \y [count=\x] in {0.5, 0.7, 0.8, 0.9, 0.95, 1, 1.05, 1.07, 1.2, 1.205, 2, 3, 3.1, 5, 5.4, 5.8, 6.1, 6.15, 6.125, 6.4}
\node at(\x,\y) {\includegraphics[width=\y*0.2cm]{../figs/Potato.png}};
\end{tikzpicture}

решение1

\includegraphicsв отличие от pgf не анализирует аргументы своих ключей, поэтому вам необходимо выполнить анализ.

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \y [count=\x] in {0.5, 0.7, 0.8, 0.9, 0.95, 1, 1.05, 1.07, 1.2, 1.205, 2, 3, 3.1, 5, 5.4, 5.8, 6.1, 6.15, 6.125, 6.4}
\node at(\x,\y) {\pgfmathparse{\y*0.2}\includegraphics[width=\pgfmathresult cm]{example-image-duck}};
\end{tikzpicture}
\end{document}

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

Кстати, \xи \yтакже используется библиотекой calc. Так что я лично, возможно, использовал бы

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \Y [count=\X] in {0.5, 0.7, 0.8, 0.9, 0.95, 1, 1.05, 1.07, 1.2, 1.205, 2, 3, 3.1, 5, 5.4, 5.8, 6.1, 6.15, 6.125, 6.4}
\node at(\X,\Y) {\pgfmathparse{\Y*0.2}\includegraphics[width=\pgfmathresult cm]{example-image-duck}};
\end{tikzpicture}
\end{document}

чтобы быть в безопасности, если я позже решу использовать его calcв цикле.

решение2

Можно ускорить вычисления в foreachцикле и избежать\pgfmathparse

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \y [count=\x, evaluate=\y as \width using \y*0.2] in {0.5, 0.7, 0.8, 0.9, 0.95, 1, 1.05, 1.07, 1.2, 1.205, 2, 3, 3.1, 5, 5.4, 5.8, 6.1, 6.15, 6.125, 6.4}
\node at(\x,\y) {\includegraphics[width=\width cm]{example-image}};
\end{tikzpicture}
\end{document}

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

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