我要绘制几个测量值,并希望使用类似 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}