有没有办法在 R^3 中制作任意函数的漂亮轮廓图,例如下面的图,而无需使用 gnuplot 轮廓线?
我询问的原因是我更喜欢简单设置 TeX 环境,而且由于 gnuplot 不包含在 Mactex 包中,并且需要对命令行调用等进行一些调整。如果可行的话,我更喜欢用现有的东西来解决问题。
一种明显的方法是手动计算轮廓,但我看到下面这个解决方案,并且非常喜欢它采用表面的单一函数并自行生成轮廓。
答案1
pgfplots
目前支持等高线图,如果它们是通过某些外部程序(contour prepared
)预先计算的,或者它可以调用外部工具来计算它们,如在contour gnuplot
。
曾尝试在 TeX 中实现计算轮廓的功能,但贡献者必须继续他的学业而无法完成。
意思是:不,目前这是不可能的pgfplots
。
意思是:pgfplots
必须借助于gnuplot
或者“其他合适的外部工具”。
如果有人想在 Lua 中实现轮廓算法,也可以将其集成。
答案2
如果你不介意基于 Python 的 matplotlib 示例如上所述(请注意,有更令人愉悦的图形这里)sagetex
是一个选项,因为它允许您运行 Python 代码。
\documentclass{article}
\usepackage{sagetex}
\usepackage{graphicx}
\pagestyle{empty}
\begin{document}
\begin{sagesilent}
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
cset = ax.contourf(X, Y, Z, zdir='z', offset=-100, cmap=cm.coolwarm)
cset = ax.contourf(X, Y, Z, zdir='x', offset=-40, cmap=cm.coolwarm)
cset = ax.contourf(X, Y, Z, zdir='y', offset=40, cmap=cm.coolwarm)
ax.set_xlabel('X')
ax.set_xlim(-40, 40)
ax.set_ylabel('Y')
ax.set_ylim(-40, 40)
ax.set_zlabel('Z')
ax.set_zlim(-100, 100)
plt.savefig('Contour.png')
\end{sagesilent}
Sagetex let's you borrow the power of Python in creating pictures. This
example comes from:
\begin{verbatim}
http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#surface-plots
\end{verbatim}
and it's running in \LaTeX \,with the power of the sagetex package.
\begin{center}
\includegraphics[width=5in,height=4in]{Contour.png}
\end{center}
\end{document}
在运行时会给出此输出萨基马云地点: