Como posso usar o valor atual de um loop foreach para alterar a largura do objeto desenhado?

Como posso usar o valor atual de um loop foreach para alterar a largura do objeto desenhado?

Eu gostaria de criar um TikGráfico z onde um vetor de números é usado para incluir uma imagem. Quero que a imagem seja dimensionada usando o valor atual, de modo que as imagens mais altas y-axissejam maiores do que aquelas com valores baixos. De alguma forma eu sempre recebo o erro"Unidade de medida ilegal (pt inserido)"ao tentar usar minha variável no argumento de largura. Isso é o que eu fiz até agora:

\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}

Responder1

\includegraphicsfaz, ao contrário do pgf, não analisa os argumentos de suas chaves, então você precisa analisar.

\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}

insira a descrição da imagem aqui

Aliás, \xe \ytambém se acostumar com a calcbiblioteca. Então, eu pessoalmente talvez usaria

\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}

para estar no lado seguro se mais tarde eu decidir usar calcno loop.

Responder2

É possível avançar os cálculos em foreachloop e evitar\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}

insira a descrição da imagem aqui

informação relacionada