答案1
我认为,如果想要自然地定制 2D 图形,请使用普通的 TikZ。此外,如果想要自然地、数学地定制 3D 图形,请使用普通的 Asymptote。
这个带有 Asymptote 的 xycomb 怎么样?
// Run on http://asymptote.ualberta.ca/
import three;
unitsize(1cm);
currentprojection=orthographic((1,1,.5),center=true,zoom=.95);
surface b=scale3(.2)*unitsphere;
pair[] xycomb={(0,1), (3,0), (4,4), (3,2), (2,4), (0,4)};
real[] h={1.5,2,1,3,1,3.5};
pen[] p={red,blue,magenta,yellow,orange,green};
pen q=linewidth(2mm)+opacity(1);
triple[] Mxy,M;
for (int i=0; i<xycomb.length; ++i){
M.push((xycomb[i].x,xycomb[i].y,h[i]));
Mxy.push((xycomb[i].x,xycomb[i].y,0));
draw(Mxy[i]--M[i],p[i]+q);
draw(shift(M[i])*b,p[i]);
}
// grid on XY-plane
import grid3;
limits((-1,-1,0),(5,5,0));
grid3(XYXgrid,step=1,.5gray+.5white);
draw(Label("$x$",EndPoint),-X--5X,Arrow3);
draw(Label("$y$",EndPoint),-Y--5Y,Arrow3);
draw(Label("$z$",EndPoint),O--3Z,Arrow3());
附录选项xcomb
,ycomb
,xbar
,ybar
最初在 TikZ 中(参见第 22.8 节 平滑图、锐利图、跳跃图、梳状图和条形图在里面手册)pgfplots
我猜这是基于的。
\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}[thick]
\draw plot[ycomb,mark=ball] coordinates{(1,1) (2,1.5)};
\draw[gray,<->]
(3,0) node[right,black]{$x$}--(0,0)--(0,2) node[above,black]{$y$};
\end{tikzpicture}
\end{document}
但是,如果喜欢直接用纯 TikZ 绘图,则可以忽略xcomb
,ycomb
,xbar
,ybar
\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}[c/.style={circle,inner sep=2pt},thick]
\draw[red] (1,0)--+(90:1) node[c,fill=red]{};
\draw[blue] (2,0)--+(90:1.5) node[c,fill=blue]{};
\draw[gray,<->]
(3,0) node[right,black]{$x$}--(0,0)--(0,2) node[above,black]{$y$};
\end{tikzpicture}
\end{document}
答案2
根据此处对不同但相关问题的反馈是否可以在 pgfplots 中请求一种新的绘图类型?如果可以,如何请求?我可以修改@hpekristiansen 提供的一个示例来生成几乎我想要的,所以这几乎是一个答案,但它可能对其他人有帮助——此外,这不适合评论。问题:如何摆脱顶部和底部的端点?我只想要这条线。我可以忍受这个,但也许我可以做得更好。这是代码,输出如下:
\documentclass]{amsbook}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
view={110}{20},
width=10cm,
height=10cm,
grid=major,
xmin=0,xmax=4,
ymin=0,ymax=4,
zmin=0,zmax=3,
xtick={0,1,2,3,4},
ytick={0,1,2,3,4},
ylabel={$y$},
xlabel={$x$},
zlabel={$z$},
]
\addplot3 coordinates {(3,3,0) (3,3,1.5)};
\end{axis}
\end{tikzpicture}
\end{document}