我希望能够通过一个addplot
命令更改图表中某个部分的线条样式。是否有任何方法可以更改 x 轴指定部分的线条样式属性?我只见过类似的问答地址多个 addplots以满足不同的线条风格,以及很好的例子其中解决方案似乎是通过添加draw
具有不同风格来满足问题的期望。不过,它似乎也只是在最后的情节可视化中添加了不同的情节。
我的 MWE 如下所示,它采用了一种“丑陋”的解决方案,即仅将各个部分拆分为多个addplot
命令。
\documentclass[10pt,border=3mm,tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usetikzlibrary{pgfplots.groupplots}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[
group style={
group size = 1 by 1,
},
clip=true,
enlargelimits=true,
height = 0.75\columnwidth,
width = 1\columnwidth,
axis x line = center,
axis y line = center,
xlabel={$x$},
xmin=0,
xmax=3,
xtick={0,1,2,3}
]
\nextgroupplot[ymin=0,
ymax=10,
ytick={0,2,...,10},
ylabel = {$y$}
]
\addplot[color=blue, domain = 0:1, samples=50
] {x^2};
\addplot[color=blue, dashed, domain = 1:2, samples=50
] {x^2};
\addplot[color=blue, domain = 2:3, samples=50
] {x^2};
\end{groupplot}
\end{tikzpicture}
\end{document}
提前致谢。
答案1
您可以使用库soft clip
提供的功能fillbetween
(如 MS-SPO 在评论中所建议的),并根据第 104 页的示例创建自己的自定义样式。当前 PGFPlots 手册(版本 1.18.1):
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usetikzlibrary{pgfplots.groupplots, fillbetween}
\pgfplotsset{
dashed between/.style args={#1:#2}{
draw=none,
postaction={
draw,
decorate,
decoration={
soft clip,
soft clip path={
(\pgfkeysvalueof{/pgfplots/xmin},\pgfkeysvalueof{/pgfplots/ymin}) rectangle
(#1,\pgfkeysvalueof{/pgfplots/ymax})
},
}
},
postaction={
draw,
dashed,
decorate,
decoration={
soft clip,
soft clip path={
(#1,\pgfkeysvalueof{/pgfplots/ymin}) rectangle
(#2,\pgfkeysvalueof{/pgfplots/ymax})
},
}
},
postaction={
draw,
decorate,
decoration={
soft clip,
soft clip path={
(#2,\pgfkeysvalueof{/pgfplots/ymin}) rectangle
(\pgfkeysvalueof{/pgfplots/xmax},\pgfkeysvalueof{/pgfplots/ymax})
},
}
}
}
}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[
group style={
group size=1 by 1,
},
clip=true,
enlargelimits=true,
height=0.75\columnwidth,
width=1\columnwidth,
axis x line=center,
axis y line=center,
xlabel={$x$},
xmin=0,
xmax=3,
xtick={0,1,2,3}
]
\nextgroupplot[
ymin=0,
ymax=10,
ytick={0,2,...,10},
ylabel={$y$}
]
\addplot[color=blue, domain={0:3}, dashed between={1:2}] {x^2};
\addplot[color=red, domain={0:3}, dashed between={0.5:2.5}] {4};
\end{groupplot}
\end{tikzpicture}
\end{document}