我正在尝试使用 pgfplots 和曲面图绘制数据矩阵。
这个问题中描述的方法对我很有效:使用 pgfplots,如何排列数据矩阵以绘制曲面图,以便矩阵中的每个单元格都绘制为正方形?
每个正方形都应该是二次的,所以我尝试使用“x = 1cm,y = 1cm”来设置大小,如下答案所述:https://tex.stackexchange.com/a/31028/29619
不幸的是,这会导致情节混乱并发出警告。
此代码编译为具有非正方形矩形的平面图:
\documentclass[a4paper,10pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{
0 0 0.77
0 1 0
1 0 0
1 1 0
}\data
\begin{tikzpicture}
\begin{axis}[
width=5cm,
title={\texttt{Minimal purity plot}},
view={0}{90},
colormap={bluenew}{rgb255(0cm)=(255,255,255); rgb255(1cm)=(40,40,240)},
colorbar,
colorbar style={
at={(1.5, 0.5)},
anchor=west,
xticklabel pos=right,
},
xmin=0,
xmax=1,
ymin=0,
ymax=1,
xtick=data,
ytick=data,
point meta min=0,
point meta max=1,
xlabel=x,
ylabel=y]
\addplot3 [surf, shader=flat corner] table {\data};
\end{axis}
\end{tikzpicture}
\end{document}
当我将“x = 1cm, y = 1cm”添加到轴设置时,会出现有关缺少设置大小的警告。如果我也添加“z = 1cm”,它看起来又像一个 3D 盒子。
它应该看起来像 MWE 中的样子,但大小不同。有办法吗?
改变轴描述中的宽度没有帮助。
编辑 感谢 percusse 的建议,单元格现在变成了正方形。我仍然希望拥有不同的图,并且各个图的单元格大小保持一致。
\pgfplotstableread{
0 0 0.77
0 1 0.5
0 2 0
1 0 0
1 1 0.3
1 2 0
2 0 0.9
2 1 0
2 2 0
}\datan
\begin{tikzpicture}
\begin{axis}[
title={\texttt{Second working plot}},
view={0}{90},
colormap={bluenew}{rgb255(0cm)=(255,255,255); rgb255(1cm)=(40,40,240)},
colorbar,
colorbar style={
at={(1.5, 0.5)},
anchor=west,
xticklabel pos=right,
},
xmin=0,
xmax=2,
ymin=0,
ymax=2,
xtick=data,
ytick=data,
point meta min=0,
point meta max=1,
xlabel=x,
ylabel=y,
axis equal]
\addplot3 [surf, shader=flat corner] table {\datan};
\end{axis}
\end{tikzpicture}
在第二个示例中,单元格要小得多,因为更多的单元格适合同一个图。我希望单元格大小保持一致,而图大小会发生变化。
答案1
您可以设置x=1cm, y=1cm, z=0cm
以获取具有固定单位向量的二维图:
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\pgfplotsset{
colormap={bluenew}{rgb255(0cm)=(255,255,255); rgb255(1cm)=(40,40,240)},
colorbar,
colorbar style={
at={(rel axis cs:1,0)},
anchor=south west,
xticklabel pos=right,
try min ticks=3,
height=1.5cm,
x=0.25cm
},
xtick=data,
ytick=data,
point meta min=0,
point meta max=1,
x=1.5cm, y=1.5cm,z=0cm,
xlabel=x,
ylabel=y
}
\pgfplotstableread{
0 0 0.77
0 1 0
1 0 0
1 1 0
}\data
\begin{tikzpicture}
\begin{axis}[
title={\texttt{Minimal purity plot}}]
\addplot3 [surf, shader=flat corner] table {\data};
\end{axis}
\end{tikzpicture}
\pgfplotstableread{
0 0 0.77
0 1 0.5
0 2 0
1 0 0
1 1 0.3
1 2 0
2 0 0.9
2 1 0
2 2 0
}\datan
\begin{tikzpicture}
\begin{axis}[
title={\texttt{Second working plot}}]
\addplot3 [surf, shader=flat corner] table {\datan};
\end{axis}
\end{tikzpicture}
\end{document}