我正在尝试使用 Tikz 的一些变体创建一个矩形图,这样我就可以在 x 轴上按 pi/4 计数。我基本上可以做到;但是,我希望标签是精确的形式(即分数,带有 pi 符号)。以下是我目前所拥有的:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tkz-euclide}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\tkzInit[xmin=0,xmax=3.1415,ymin=-1.5,ymax=1.5,xstep=.785398163,ystep=.5]
\tkzGrid
\tkzAxeXY
\end{tikzpicture}
\end{document}
我一直严重依赖 tkz-euclide 来完成我的项目,但我愿意冒任何需要的风险来完成工作。我尝试使用 GeoGebra 的 Export to Tikz,但结果与上面的结果大不相同,而且我很难将其编辑到我满意的程度。我要制作几种这样的图表,所以我希望我可以有一个易于修改的代码库来构建。
感谢您的帮助!
答案1
我建议改用常规格式tikz
,pgfplots
因为它们更加灵活,还允许调整(例如)刻度标签的背景。在这里介绍的两种解决方案中,一些网格线都穿透了刻度标签空间。如果您愿意切换,您可以使用问题下方评论中已经推荐的答案。
如果您想坚持使用 tkz-euiclide,您可以使用以下两种解决方案之一。
第一个解决方案
这个解决方案比第二个解决方案更简洁,因为只改变了坐标系中需要特殊处理的部分。但是这个解决方案更复杂,也存在问题。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tkz-euclide}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\tkzInit[xmin=0,xmax=1,ymin=-1.5,ymax=1.5,xstep=.25,ystep=.5]
\tkzGrid
\tkzAxeY
\tkzDrawX
\tkzClip[space=0.1]
\begin{scope}[xscale=4/pi]
\tkzLabelX[trig=4,below=.25cm]
\end{scope}
\end{tikzpicture}
\end{document}
您可以\tkzAxeXY
将其底层部分\tkzAxeX
和拆分成\tkzAxeY
。y 轴不是问题,因此我们将只关注 x 轴。\tkzAxeX
可以拆分成\tkzDrawX
和\tkzLabelX
,这是必要的,因为为了使此解决方案有效,必须将轴线和刻度与轴刻度标签分开绘制。
xmax=1
通过拆分所有这些,我们可以绘制一个具有和的虚拟坐标系xstep=0.25
,这将为网格和轴刻度产生正确的线条,并且trig=4
仅对刻度标签使用选项,这将在错误的位置产生正确的标签。为了纠正位置,使用xscale=4/pi
正常的范围。(请注意,我在这里使用了而不是数字,这是一个特殊的常数,并且也知道。)tikz
pi
tikz
tkz-euclide
不幸的是, 的内部结构tkz-euclide
会导致舍入错误,导致\tkzLabelX
打印过多的刻度标签。 这个多余的刻度标签被 剪掉\tkzClip
。
旁注:如果您想在坐标系中绘制点或其他东西,请记住pi
位于1
。
第二种解决方案
我在寻找第一个解决方案的过程中偶然发现了这个解决方案,实际上我不知道它为什么有效。我还是会发布它,也许其他人知道参数xmax
和xstep
in如何\tkzInit
一起发挥作用以实现此输出。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tkz-euclide}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[xscale=4/pi]
\tkzInit[xmin=0,xmax=pi,ymin=-1.5,ymax=1.5,xstep=.999,ystep=.5]
\tkzGrid[xstep=0.25*pi]
\tkzAxeY
\tkzAxeX[trig=4,below=.25cm]
\end{tikzpicture}
\end{document}
在这种情况下,整个图片必须在 x 方向上缩放,这也会将 x 轴标签进一步向右移动。这就是为什么我个人认为这个解决方案不如第一个解决方案干净的原因。
旁注:如果您想在此坐标系中绘制点或其他东西,则pi
位于pi
,这很好。