É possível extrapolar dados para um gráfico 3D em pgfplots?

É possível extrapolar dados para um gráfico 3D em pgfplots?

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.datse 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 = 0e y = 0pontos. Como pgfplotsé capaz de interpolar, talvez também seja capaz de extrapolar.

É assim que parece:

insira a descrição da imagem aqui

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 comspeed $v$ in \si{\metre\per\second}

Responder1

Em relação à questão principal:

pgfplotsvem sem suporte integrado para extrapolações.

Você precisaria calculá-los por meio de um produto externo, talvez octaveou 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}

insira a descrição da imagem aqui

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}

insira a descrição da imagem aqui

informação relacionada