我只想翻转饼图中“Pecan”和“Peach”的节点。我提供的代码与我在另一篇文章中提供的代码相同。一个回复是将命令从
\path (O) -- node[rotate=220]{Pecan} (220:3);
到
\path (O) -- node[rotate=45]{Pecan} (220:3);.
具体来说,更改rotate=220
为会rotate=45
翻转节点。为什么rotate=45
有效?rotate=50
、rotate=67
和rotate=-12
也有效吗?另一位成员建议只使用sloped
或sloped, allow upside down
,其中一个会给我想要的显示。对吗?
\documentclass{amsart}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate (O) at (0,0);
\draw (O) circle (3);
\draw (O) -- (0:3);
\draw (O) -- (120:3);
\draw (O) -- (210:3);
\draw (O) -- (230:3);
\draw (O) -- (270:3);
\draw (O) -- (310:3);
\path (O) -- node{Vanilla} (60:3);
\path (O) -- node{Chocolate} (165:3);
\path (O) -- node[rotate=220]{Pecan} (220:3);
\path (O) -- node[rotate=250]{Peach} (250:3);
\path (O) -- node{Mint} (290:3);
\path (O) -- node[rotate=335]{Strawberry} (335:3);
\end{tikzpicture}
\end{document}
答案1
为什么 rotate=45 有效? rotate=50、rotate=67 和 rotate=-12 也能有效吗?
让我们从单词(即节点)围绕中心旋转的前提开始,中心是默认锚点。因此,除非您指定不同的锚点,否则它们将“旋转”。默认角度为 0,即从左到右的一条直线。
正角度将旋转单词逆时针, 像这样:
而负角度会旋转它顺时针, 像这样:
因此在下面的代码中我将使用逆时针运动(使用正值更容易)。
另一位成员建议只使用倾斜或倾斜,允许倒置,其中一个就可以给我想要的显示效果。对吗?
sloped
基本上是节点沿对角线path
(或draw
)的属性,遵循其倾斜度。如果不添加此选项,节点将以水平方式排版(无论路径的倾斜度如何)。allow upside down
在这种情况下,不鼓励这样做,因为单词会出现……颠倒(阅读起来不太舒服)。
但是,您可以使用 foreach 命令创建饼图,这可以大大简化和减少代码。我仅针对此示例将 documentclass 更改为standalone
并添加了包amsmath
,但它也应该可以正常工作\documentclass{amsart}
(已测试)。如果您有任何疑问,请在下面提问:
输出
代码
\documentclass[margin=10pt]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (O) at (0,0);
\draw (O) circle (3);
\foreach \angle/\taste [remember=\angle as \lasta (initially 0)] in {
120/Vanilla,
210/Chocolate,
230/Pecan,
270/Peach,
310/Mint,
360/Strawberry}
{
\coordinate (\angle) at (\angle:3);
\draw (O) -- (\angle);
\path (O) -- node[sloped]{\taste} ({(\lasta+\angle)/2}:3);
}
\end{tikzpicture}
\end{document}
基本上,只要您看到\something
,它就是一个变量。由于 是\foreach
一个循环,因此每次\angle
和\taste
都会改变。它们会一起改变(它们在该列表中是耦合的)。
它的作用如下:
对于该列表中的每个当前角度(称为
\angle
),创建一个由角度本身调用的坐标,定位在角度和距离处。\coordinate (\angle) at (\angle:3);
另外,记住最后一个角度为
\lasta
。O
然后从到 上面定义的坐标绘制一条路径\angle
。这将绘制到我在列表中指定的每个角度的线(换句话说,就是饼图切片)。最后,创建一条从 到 的路径(除非您另行指定,否则路径是不可见的),该路径位于 到 的最后一个角度( )和当前角度( )
O
的平均值之间。平均值是通过 计算的,因此例如在第一个循环(从 0 开始)中,它将变为 ,因此。事实上,是 60 度。\lasta
\angle
({(\lasta+\angle)/2}:3)
({(\0+120)/2}:3)
(60:3)
Vanilla