我想使用 TikZ 绘制一个简单方程式(如 x^2+xy+2y^2=1)的图形。这里有一些关于隐式图的帖子,但对我而言都不起作用。
我正在使用 TeXShop 版本 3.92 和\documentclass{book}
。
答案1
问题 18359
splot x^2 + x*y + 2*y^2 - 1;
我添加了一行
set samples 500;
以获得更平滑的曲线。
完整示例:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot +[no markers,
raw gnuplot,
thick,
empty line = jump % not strictly necessary, as this is the default behaviour in the development version of PGFPlots
] gnuplot {
set contour base;
set cntrparam levels discrete 0.003;
unset surface;
set view map;
set isosamples 500;
set samples 500;
splot x^2 + x*y + 2*y^2 - 1;
};
\end{axis}
\end{tikzpicture}
\end{document}
此解决方案需要格努普特已安装并可在命令行上使用。根据 TeX 配置(texmf.cnf
在 TeX Live 中),通常需要 TeX 编译器的选项-shell-escape
(TeX Live)/ -enable-write18
(MiKTeX) 来运行示例,请参阅评论莎丽。
问题 285246
例如问题 285246还可与以下函数配合使用:
f(x,y) = x**2 + x*y + 2*y**2 - 1;
(x 2表示为x**2
。)
完整示例:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw plot[id=question1, raw gnuplot] function{
f(x,y) = x**2 + x*y + 2*y**2 - 1;
set xrange [-4:4];
set yrange [-4:4];
set view 0,0;
set isosample 1000, 1000;
set size square;
set contour base;
set cntrparam levels incre 0,0.1,0;
unset surface;
splot f(x,y);
};
\end{tikzpicture}
\end{document}
答案2
答案3
如果您不介意非 tikz 解决方案,那么mfpic
MetaPost 语言包接口似乎可以通过其\levelcurve
命令很好地解决此类问题。
\documentclass[border=3bp]{standalone}
\usepackage[metapost, mplabels, truebbox]{mfpic}
\setlength{\mfpicunit}{1cm}
\opengraphsfile{\jobname}
\begin{document}
\begin{mfpic}[2]{-1.5}{1.5}{-1.5}{1.5}
\drawcolor[gray]{0.7}
\gridlines{.5,.5}
\drawcolor{black}
\levelcurve{origin, .01}{x**2 + x*y + 2(y**2) < 1}
\doaxes{xy}
\tlpointsep{3bp}
\tlabels{[tc]{(-1, 0)}{$-1$} [tc]{(1, 0)}{$1$} [tc]{(\xmax, 0)}{$x$}}
\tlabels{[cr]{(0, -1)}{$-1$} [cr]{(0, 1)}{$1$} [cr]{(0, \ymax)}{$y$}}
\end{mfpic}
\closegraphsfile
\end{document}
使用 TeXShop,先用 (PDF)LaTeX 处理该 TeX 文件,然后再用 MetaPost 处理,最后再次用 LaTeX 处理。
查看mfpic
文档有关此最有用命令的更多信息,请参见第 44-45 页。
答案4
\begin{tikzpicture}
\begin{axis}[hide axis,xmin=-2,xmax=2,ymin=-2,ymax=2,]
\addplot [blue,thick,domain=0:360,samples=200]({(cos(x)+sin(x)},{sin(x)});
\end{axis}
\end{tikzpicture}