Estou tendo várias medidas para traçar e gostaria de usar algo como uma superfície 3D do pgfplots
. Estou tendo um quadro como borda externa e uma grade como raster de medição. Os valores medidos são obtidos no meio de cada célula da grade. Ao plotar toda a superfície, gostaria de extrapolar os dados até as bordas externas do quadro para preencher tudo com a superfície.
Aqui está o que tenho até agora:
\documentclass{standalone}
\usepackage[locale = DE]{siunitx}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\SendSettingsToPgf
\pgfplotsset{%
,grid style={black, thin}
,y label style={rotate=-90}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
,colorbar
,view={0}{90}
,xmin=0
,xmax=3910
,ymin=0
,ymax=2040
,width=391pt
,height=204pt
,grid=major
,xlabel=Width $b_\mathrm{frame}$ in \si{\milli\metre}
,ylabel=Height $h_\mathrm{frame}$ in \si{\milli\metre}
]
\addplot3[%
,surf
,shader=interp
] file {data.dat};
\end{axis}
\end{tikzpicture}
\end{document}
e data.dat
se parece com:
85 1955 0.97
255 1955 1.86
425 1955 2.44
595 1955 2.23
765 1955 2.17
935 1955 2.35
1105 1955 2.21
1275 1955 2.53
1445 1955 2.58
1615 1955 2.64
1785 1955 2.6
1955 1955 2.03
2125 1955 2.5
2295 1955 2.32
2465 1955 2.22
2635 1955 2
2805 1955 1.59
2975 1955 2.23
3145 1955 2.18
3315 1955 2.07
3485 1955 2.38
3655 1955 2.48
3825 1955 1.42
85 1785 1.3
255 1785 1.41
...
Então preciso obter valores para todos x = 0
e y = 0
pontos. Como pgfplots
é capaz de interpolar, talvez também seja capaz de extrapolar.
É assim que parece:
Dois pontos extras:
- Eu gostaria de colocar a grade (não as marcas) no raster de medição, digamos, cada 170 mm
- Eu gostaria de obter o mapa de cores rotulado com
speed $v$ in \si{\metre\per\second}
Responder1
Em relação à questão principal:
pgfplots
vem sem suporte integrado para extrapolações.
Você precisaria calculá-los por meio de um produto externo, talvez octave
ou matlab
.
Responder2
(Solução parcial) Não conheço esse recurso, sinto muito. Mas posso ajudá-lo com essas duas tarefas extras. Aqui vamos nós.
\documentclass{standalone}
\usepackage{filecontents}
\usepackage[locale = DE]{siunitx}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\SendSettingsToPgf
\pgfplotsset{%
,grid style={black, thin}
,y label style={rotate=-90}}
\begin{document}
\begin{filecontents*}{data.dat}
85 1955 0.97
255 1955 1.86
425 1955 2.44
595 1955 2.23
765 1955 2.17
935 1955 2.35
1105 1955 2.21
1275 1955 2.53
1445 1955 2.58
1615 1955 2.64
1785 1955 2.6
1955 1955 2.03
2125 1955 2.5
2295 1955 2.32
2465 1955 2.22
2635 1955 2
2805 1955 1.59
2975 1955 2.23
3145 1955 2.18
3315 1955 2.07
3485 1955 2.38
3655 1955 2.48
3825 1955 1.42
85 1785 1.3
255 1785 1.41
\end{filecontents*}
\begin{tikzpicture}
\begin{axis}[%
,colorbar
,view={0}{90}
,xmin=0
,xmax=3910
,ymin=0
,ymax=2040
,width=391pt
,height=204pt
,grid=major
,xlabel=Width $b_\mathrm{frame}$ in \si{\milli\metre}
,ylabel=Height $h_\mathrm{frame}$ in \si{\milli\metre}
,xtick={0,170,...,3910}
,ytick={0,170,...,2040}
,tick style={black}
,x tick label style={rotate=90}
]
\addplot3[
,surf,
,shader=interp
] file {data.dat};
\end{axis}
\node[xshift=2mm, yshift=4.5mm, rotate=90] at (current bounding box.east){Speed $v$ in \si{\metre\per\second}};
\end{tikzpicture}
\end{document}
Editar:Podemos estender nosso exemplo usando ticks maiores e menores para obter o efeito de que a grade é mais frequente do que seus rótulos. Adicionei outro gráfico 3D com dois pontos em branco para controlar o mínimo e o máximo no eixo z, isso afeta o mapa de cores.
\documentclass{standalone}
\usepackage{filecontents}
\usepackage[locale = DE]{siunitx}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\SendSettingsToPgf
\pgfplotsset{%
,grid style={black, thin}
,y label style={rotate=-90}}
\begin{document}
\begin{filecontents*}{data.dat}
85 1955 0.97
255 1955 1.86
425 1955 2.44
595 1955 2.23
765 1955 2.17
935 1955 2.35
1105 1955 2.21
1275 1955 2.53
1445 1955 2.58
1615 1955 2.64
1785 1955 2.6
1955 1955 2.03
2125 1955 2.5
2295 1955 2.32
2465 1955 2.22
2635 1955 2
2805 1955 1.59
2975 1955 2.23
3145 1955 2.18
3315 1955 2.07
3485 1955 2.38
3655 1955 2.48
3825 1955 1.42
85 1785 1.3
255 1785 1.41
\end{filecontents*}
\begin{tikzpicture}
\begin{axis}[%
,colorbar
,view={0}{90}
,xmin=0
,xmax=3910
,ymin=0
,ymax=2040
,width=391pt
,height=204pt
,grid=minor
,xlabel=Width $b_\mathrm{frame}$ in \si{\milli\metre}
,ylabel=Height $h_\mathrm{frame}$ in \si{\milli\metre}
,minor xtick={0,170,...,5000}
,minor ytick={0,170,...,5000}
,xtick={0,500,...,5000}
,ytick={0,500,...,5000}
,tick style={black}
%,x tick label style={rotate=90}
]
\addplot3[surf, shader=interp] file {data.dat};
\addplot3[surf] coordinates {(0, 0, 0) (0, 0, 3)};
\end{axis}
\node[xshift=2mm, yshift=4.5mm, rotate=90] at (current bounding box.east){Speed $v$ in \si{\metre\per\second}};
\end{tikzpicture}
\end{document}