决定如何使用或不使用 pgfplots 来最好地指定 tikzpicture 坐标的标准

决定如何使用或不使用 pgfplots 来最好地指定 tikzpicture 坐标的标准

结论

正如 Christian 所指出的,最初的问题过于宽泛,基本上是由于对 和 的两个主要手册的大小以及它们之间的关系感到不知所措tikzpgfplotstikzpicture创建图形的主要环境,因此您应该研究一下 的指定坐标部分手册.pdf。的当前版本tikz是 2.10。如果您刚开始使用,以下内容很有帮助:Tikz 简介

如果你在你的第 4.16 节pgfplot中包含tikzpicturepgfplots.pdf应该研究,特别是 4.16.1 解释axis cs坐标系。当前手册是 1.8 版,当前版本pgfplots是 1.9 版。

我在下面保留了我的原始 MWE,以展示我试图做什么,并征求了以下所有建议。第一个例子已经变得多余,因为我现在知道如何在 3D 中绘制曲线,\addplot3并且该示例现在已在环境中完全重写\begin{axis}。请参阅在 3D 图上定位各种类型的节点尽管如此,将tikzpicture元素放置在导入的图形背景上的想法仍然非常重要,因为您将需要使用无法完全在其中创建的图形,例如您要放置设计描述的飞机照片。

第二个示例是关于找到将 LaTeX 节点放置在 上的最便捷方法pgfplot。这就是 percusse 指出的地方axis cs,而 Jake 指出您可以缩放axis而不是整个tikzpicture。当您有导入的背景时处理缩放对我来说仍然是一个悬而未决的问题。缩放背景可能会使其与您在其上放置的内容不同步,我仍然不确定管理它的最佳方法是什么。

讽刺的是,node at我最初遇到麻烦并正在寻找替代方案的这个工具现在对我来说非常有用。我只需要意识到它实际上在做什么,现在我正在充分利用它。这都是学习曲线的一部分。

我还使用自己的轴标签来处理因使用过时的 而导致的问题pgfplots。这些问题已在 1.8 版中修复。

感谢所有发表评论的人。

MWE 1 输出

MWE 1 结果

MWE 1 导入图像

导入的图像

MWE 1 代码

\documentclass[12pt,a4paper,fleqn]{article}
\usepackage[a5paper,margin=14mm]{geometry}

\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{pgfplots}
\usepackage{mathtools}

\def\dd{\,{\rm d}}
\def\nv{\mathbf{n}}

\begin{document}
%
\par\begin{tikzpicture}
    \node[anchor=south west,inner sep=0] (image) at (0,0)
        {\includegraphics[width=0.6\textwidth]{orient}};
    \begin{scope}
        [x={(image.south east)},y={(image.north west)}]
        \path node at (.14, .03) {$x$} node at (.96, .49) {$y$}
            node at (0.35, .95) {$z$} node at (.65, .03) {$\dd r$}
            node at (.96, .17) {$\nv = (0, 1, 0)$} node at (0.65, 0.65) {$\dd s$};
    \end{scope}
\end{tikzpicture}
%
\par\begin{tikzpicture}[scale=3]
    \node[anchor=south west,inner sep=0] (image) at (0,0)
        {\includegraphics[width=0.4\textwidth]{orient}};
    \begin{scope}
        [x={(image.south east)},y={(image.north west)},font=\footnotesize]
        \path node at (.14, .03) {$x$} node at (.96, .49) {$y$}
            node at (0.35, .95) {$z$} node at (.65, .03) {$\dd r$}
            node at (.96, .17) {$\nv = (0, 1, 0)$} node at (0.65, 0.65) {$\dd s$};
    \end{scope}
\end{tikzpicture}
%
\end{document}

MWE 2 输出

MWE 2 输出

MWE 2 代码

\documentclass[10pt,a4paper,fleqn]{article}
\usepackage[a5paper,margin=14mm]{geometry}
\usepackage{pgfplots}
\usepackage{amsmath}

\begin{document}
%
\par\begin{tikzpicture}[scale=1.00]
%
\begin{axis}[
    xtick={-1, 1, 3}, ytick={-8,-4, 4,8},
    width=12cm, height=5cm,
    axis lines=middle,
    enlargelimits=true,
    samples=201,
    clip=false
]
\path node [xshift=9.2cm][yshift=1.1cm] {$t$}
    node [xshift=2.0cm][yshift=3cm] {$y$};
\addplot [thick, color=green, domain=-1:0] ( {x}, {0} );
\addplot [thick, color=green, domain=0:4] ( {x}, {x^2*(2-x)*(4-x)^2} )
    node [color=green, pos=.55][yshift=-1.8cm]
    {$g(t)=\begin{cases}
    0&-1\le t \le 0\\t^2(2-t)(4-t)^2&\hfill 0\le t \le4
    \end{cases}$};
%
\end{axis}
%
\end{tikzpicture}
%
\end{document}

答案1

我承认我仍然有点不确定什么才是“好的”答案。听起来你好像被两本厚厚的手册压得喘不过气来,很难找到你想要的信息。

另一方面,问题相当不精确,因为“请解释所有不同的方法......”要求“给我一本(可用的)手册”。

我相信对您的问题的一个好的答案是尽可能地帮助您找到手册中的正确部分,然后让您提出更具体的问题。

此外,我还可以立即讨论与您手头用例相关的主题。


首先,让我指出解决你手头问题的一个方面(我相信在你的问题的评论中已经在一定程度上解决了这个问题,但无论如何):你编写了 TikZ 代码来通过以下方式生成轴标签

\path node [xshift=9.2cm][yshift=1.1cm] {$t$}
    node [xshift=2.0cm][yshift=3cm] {$y$};

正如您正确指出的那样,这将受到图形宽度/高度的任何变化的影响(除非您缩放所有内容)。但是,这段代码是为了生成轴的描述 - 并且有针对此任务的构建和预配置支持:只需在轴中使用xlabel和即可生成它们,即ylabel

\begin{axis}[
    xtick={-1, 1, 3}, ytick={-8,-4, 4,8},
    width=12cm, height=5cm,
    axis lines=middle,
    enlargelimits=true,
    samples=201,
    clip=false,
    xlabel=$t$,
    ylabel=$y$,
]

为了获得正确的位置,您应该考虑写入\pgfplotsset{compat=1.8}文档的序言(您肯定已经这样做了)。

请注意,生成的标签几乎与您手动拥有的标签相同,只是默认样式pgfplots将其放置xlabel在 x 轴上以避免与刻度标签重叠。


为了更好地了解与和相关的坐标放置例程pgfplotstikz我建议阅读以下章节http://pgfplots.sourceforge.net/pgfplots.pdf

  1. “轴描述”部分包含对放置轴描述的各种方式的完整概述,无论是绝对的还是相对的,无论是尊重刻度标签宽度还是不尊重刻度标签宽度,甚至支持沿“外法线”移动。这些东西无缝地融入了 TikZ 的坐标放置机制;但所有提供的坐标系仅在 pgfplots 轴内有效。我想这回答了很多问题。

编辑1.1 “自定义注释”一节介绍了如何放置任何类型的节点,尤其是基于绝对坐标的节点。它还介绍了使用 的散点图nodes near coords以及使用 的分数节点放置pos

  1. “对齐选项”部分展示了如何放置和对齐轴,因此它看起来是一个非常本地化的章节。但是,它简要总结了 TikZ 放置和对齐节点的方式(即通过anchorat),因此它可能会引起人们的兴趣。

  2. “TikZ 互操作性”部分非常特殊,只有在真正需要时才应该阅读。如果 pgfplots 轴和数据坐标与 TikZ x 和 y 向量的坐标 1:1 相同,则需要它。这很少需要,但您的应用程序可能适合这里。

除了这些建议之外,TikZ 手册在其“指定坐标”部分中仅针对 TikZ 包含了“指定坐标的所有不同方式”。我明白您希望有一个“可扩展”的坐标位置。反过来,如果您使用和x=<x unit>, y=<y unit>书写(4,3)或类似的东西,这可能会受益匪浅。缩放这些单位很容易:只需修改<x unit><y unit>

我希望这能让您开始并重新开始生产。这肯定会引发一些具体的问题,例如“如何在没有xshift”的情况下获得以下内容,这些问题可以在此网站上得到解决。

相关内容