我承认我可能有些滥用pgfplots
,但我想以某种方式将函数图添加到图片中tikz
。我现在已经设法让它运行,我只是想知道为什么线条粗细会发生变化,以及如何消除它,以及我的代码的哪一部分对此负责(但我可以说它不是缩放也不是旋转)。
我主要借鉴一致地指定一个函数并将其用于计算和绘图和如何定义可在 \pgfmathdeclarefunction 中使用的参数化命令?,并通过嵌套另一层函数来扩展它\edef
。
顺便说一句,我很惊讶它能\pgfmathparse
处理什么(因为在扩展了所有的功能之后,它就变成了长的表达式,并且在我的实际实现中更长)
以下是(基本)MWE:
\documentclass{article}
\usepackage[english]{babel}
\usepackage{tikz}
\usepackage{pgfplots}
\newcommand{\T}[1]{3*(#1)^2-2*(#1)^3}
\edef\U#1{sin((\T{#1})*pi/2 r)}
\pgfmathdeclarefunction{q}{1}{%
\pgfmathparse{(and(#1>1, #1<2)*\U{#1-1})+(and(#1>=2, #1<4)*\U{2-#1/2})}%
}
\begin{document}
\begin{tikzpicture}[scale=1.5]
\begin{scope} %[very thin]
\draw[->] (0,0) -- (5,0);
\draw[->] (0,0) -- (0,4);
\end{scope}
\draw (1,1) -- (4,4);
\coordinate (x) at (1,1.25);
\pgfmathsqrt{2}
\pgfmathsetmacro{\mysc}{\pgfmathresult}
\begin{scope}[rotate=45,scale=\mysc]
\begin{axis}[
at=(x.north), % doesn't work with explicit coordinate {(1,1.25)}
domain=1:4, samples=200,
hide axis,
ymin=0, ymax=1,
xmin=1, xmax=4,
width=3cm, height=0.5cm, scale only axis,
]
\addplot [cyan] {q(x)};
\end{axis}
\end{scope}
\end{tikzpicture}
\end{document}
答案1
我认为发生的事情是,hide axis
不知何故,它仍然在绘制轴线(但为白色),并且这些轴线正在淡化图形的某些部分。如果您hide axis
在 MWE 中注释掉,您就会看到这一点。
根据pgfplots
手册:
隐藏轴=true|false:允许隐藏选定的轴或所有轴。不会绘制外矩形、刻度标记和标签。仅会照常处理标题和图例。轴缩放和剪切将按您未使用隐藏轴的方式进行。
最后一行是相关行。因此,如果您简单地添加,clip=false
问题就会消失:
代码:
\documentclass{article}
\usepackage[english]{babel}
\usepackage{tikz}
\usepackage{pgfplots}
\newcommand{\T}[1]{3*(#1)^2-2*(#1)^3}
\edef\U#1{sin((\T{#1})*pi/2 r)}
\pgfmathdeclarefunction{q}{1}{%
\pgfmathparse{(and(#1>1, #1<2)*\U{#1-1})+(and(#1>=2, #1<4)*\U{2-#1/2})}%
}
\begin{document}
\begin{tikzpicture}[scale=1.5]
\begin{scope} %[very thin]
\draw[->] (0,0) -- (5,0);
\draw[->] (0,0) -- (0,4);
\end{scope}
\draw (1,1) -- (4,4);
\coordinate (x) at (1,1.25);
\pgfmathsqrt{2}
\pgfmathsetmacro{\mysc}{\pgfmathresult}
\begin{scope}[rotate=45,scale=\mysc]
\begin{axis}[
at=(x.north), % doesn't work with explicit coordinate {(1,1.25)}
domain=1:4, samples=200,
hide axis,
clip=false,% <-- Adding this fixes it
ymin=0, ymax=1,
xmin=1, xmax=4,
width=3cm, height=0.5cm, scale only axis,
]
\addplot [cyan] {q(x)};
\end{axis}
\end{scope}
\end{tikzpicture}
\end{document}