我试图了解如何从一组函数中获取多个绘图,并将它们绘制在同一个窗口中而不会造成混乱;IE、边框、轴、网格等等……例如,假设我想在同一窗口中绘制 100 个函数集,S = {f : f(x)=sin(4*(x-i))/(x-i)+cos(2*i)sin(3*i) 0<i<=5 i∈{0.05, 0.10, ... , 5.0}}
并且不会杂乱,这样我就可以旋转、缩放等,最终将其作为“水印”背景,以对角线方式飞过文档。我确信,只要对函数进行足够的调整,它看起来会非常棒,但让我们举个例子S
。
我有一些 C++ 代码——这只是一个简单的for
循环——它可以帮助我创建函数列表——你知道,元编程,编写代码来编写代码。一旦我弄清楚 LaTeX 中函数绘图的一般形式是什么样的,这个问题的元编程方面就会变得相当简单——我以前从未使用 LaTeX 绘制过任何东西。
我怎样才能用这些图表替换图像?
\backgroundsetup{%
scale=5.75, %% change accordingly
angle=25, %% change accordingly
opacity=.1, %% change accordingly
color =black, %% change accordingly
contents={\begin{tikzpicture}[remember picture,overlay]
\node at ([yshift=12.5pt,xshift=5pt]current page.center) {\includegraphics[width=5cm]{wave.jpg}};%\includegraphics[width=5cm]{wave.jpg}
\end{tikzpicture}}
}
答案1
\documentclass[pstricks]{standalone}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}(0,-2)(10,5)
\multido{\ri=0.05+0.10,\iA=0+1}{100}{%
\psplot[algebraic,plotpoints=1000,linecolor=blue!\iA]%
{0}{10}{ sin(4*(x-\ri))/(x-\ri)+cos(2*\ri)*sin(3*\ri)}}
\end{pspicture}
\end{document}
答案2
不可否认,pstricks
对于这种事情来说它更有效率,因为它可以直接为函数编写后记代码,而 TikZ/pgf
在编译时计算所有点的坐标时会浪费时间。
但尽管如此,解决方案很简单TikZ
:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[samples=400,domain=0:10,black!25]
\foreach \i in {0.05,0.10,...,10.00}
\draw plot %
(\x,{sin(4*(\x-\i)*180/pi)/(\x-\i)+cos(2*\i*180/pi)*sin(3*\i*180/pi)});
\end{tikzpicture}
\end{document}
答案3
下面是使用 Asymptote 创建与页面宽度完全相同的背景图像的示例。(如果页面尺寸不同,则高度会缩小,就像当前编写的代码一样。)由于 C++ 似乎是您的首选语言,您可能会喜欢 Asymptote 语法的相似性,尤其是与 之类的东西相比\multido
。
这应该在启用该选项的情况下进行编译shell-escape
。
\documentclass{article}
\usepackage{lipsum} %for dummy text only.
\usepackage{asypictureB}
\usepackage{background}
\backgroundsetup{scale = 1, anchor, angle = 0, position = current page.center,
contents={\includegraphics{background-image.pdf}}}
\title{Title}
\author{Author}
\date{\today}
\begin{document}
\maketitle
%
\begin{asypicture}{name=compile_background}
settings.outformat = "pdf";
size(@the@paperwidth, @the@paperheight);
import graph;
// Deal with what happens when denominator equals 0:
real sinc(real x) {
if (x == 0) return 1;
else return sin(x)/x;
}
for (real i = 0.05; i <= 10; i += 0.05) {
real f(real x) {
return 4*sinc(4*(x-i)) + cos(2i)*sin(3i);
}
path g = graph(f, 0, 10, n=400, operator ..);
draw(g, 0.25*black + 0.75*white);
}
shipout(prefix="background-image");
\end{asypicture}
%
\lipsum[2-11]
\end{document}
结果(仅第一页):
答案4
已编辑,不显示轴。
这对你有什么用处?
\documentclass{article}
% Declare initial packages
\usepackage{pgfplots}
% Normal distribution macro
\pgfmathdeclarefunction{gauss}{2}{%
\pgfmathparse{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))}%
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
hide x axis,
hide y axis,
no markers,
domain=2.5:25.5,
samples=100,
xlabel=\empty,
ylabel=\empty,
every axis x label/.style={at=(current axis.right of origin),anchor=west},
every axis y label/.style={at=(current axis.above origin),anchor=south},
height=5cm, width=12cm,
xmin = 4, xmax=24,
xtick={14}, ytick=\empty,
enlargelimits=false,
clip=false,
grid=major
]
\foreach \k in {5,6,...,14} {%
\addplot [very thick,cyan!50!black] {gauss(\k,3.416969)};
}
\end{axis}
\end{tikzpicture}
\end{document}