Мне нужно построить несколько измерений, и я хотел бы использовать что-то вроде 3D-поверхности из pgfplots
. У меня есть рамка в качестве внешней границы и сетка в качестве растра измерений. Измеренные значения берутся в середине каждой ячейки сетки. При построении всей поверхности я хотел бы экстраполировать данные до внешних границ рамок, чтобы заполнить все это поверхностью.
Вот что у меня есть на данный момент:
\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}
и 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
...
Так что мне нужно получить значения для всех x = 0
и y = 0
точек. Поскольку pgfplots
он может интерполировать, возможно, он может и экстраполировать.
Вот как это выглядит:
Два дополнительных пункта:
- Я хотел бы нанести сетку (не деления) на измерительный растр, скажем, каждые 170 мм.
- Я хотел бы, чтобы цветовая карта была помечена как
speed $v$ in \si{\metre\per\second}
решение1
По основному вопросу:
pgfplots
поставляется без встроенной поддержки экстраполяций.
Вам нужно будет вычислить их с помощью внешнего продукта, возможно, octave
или matlab
.
решение2
(Частичное решение) Я не знаю о такой функции, извините. Но я могу помочь вам с этими двумя дополнительными задачами. Вот так.
\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}
Редактировать:Мы можем расширить наш пример, используя основные и второстепенные отметки, чтобы получить эффект, что сетка встречается чаще, чем ее метки. Я добавил еще один 3D-график с двумя пустыми точками для управления минимумом и максимумом на оси z, это влияет на цветовую карту.
\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}