- Como excluo que certas coordenadas sejam suavizadas pela opção "suavizar" em um gráfico PGF?
- Como evito que
\closedcycle
salte para zero?
Aqui está meu exemplo:
\documentclass{minimal}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=center,
xtick=\empty,
ytick=\empty,
plot a/.style={semithick,red,smooth},
plot b/.style={semithick,blue,smooth},
plot error/.style={thick,orange,smooth},
]
\addplot[plot a] coordinates {
(1.400,0.484) (1.450,0.464) (1.500,0.442) (1.550,0.419) (1.600,0.395) (1.650,0.370)
(1.700,0.346) (1.750,0.321) (1.800,0.297) (1.850,0.273) (1.900,0.249) (1.950,0.227)
(2.000,0.205) (2.050,0.185) (2.100,0.166) (2.150,0.148) (2.200,0.131) (2.250,0.116)
(2.300,0.102) (2.350,0.089) (2.400,0.077) (2.450,0.067) (2.500,0.057) };
\addplot[plot b] coordinates {
(1.400,0.111) (1.450,0.120) (1.500,0.130) (1.550,0.139) (1.600,0.150) (1.650,0.160)
(1.700,0.171) (1.750,0.183) (1.800,0.194) (1.850,0.206) (1.900,0.218) (1.950,0.230)
(2.000,0.242) (2.050,0.254) (2.100,0.266) (2.150,0.278) (2.200,0.290) (2.250,0.301)
(2.300,0.312) (2.350,0.323) (2.400,0.333) (2.450,0.343) (2.500,0.352) };
\addplot[plot error] coordinates{
(2.300,0.312) (2.250,0.301) (2.200,0.290) (2.150,0.278) (2.100,0.266) (2.050,0.254)
(2.000,0.242) (1.950,0.230) (1.946,0.2287) (1.950,0.227) (2.000,0.205) (2.050,0.185)
(2.100,0.166) (2.150,0.148) (2.200,0.131) (2.250,0.116) (2.300,0.102) } \closedcycle;
\end{axis}
\end{tikzpicture}
\end{document}
Os problemas são duplos:
- O canto esquerdo do triângulo laranja foi plotado incorretamente devido à suavização. (Pode-se ver isso mais facilmente, se ampliarmos o PDF resultante.) Preciso da
smooth
opção tal que o gráfico laranja siga o gráfico azul (primeira metade) e o gráfico vermelho (segunda metade) corretamente. Mas o ponto em que o gráfico laranja para de seguir o gráfico azul e começa a seguir o gráfico vermelho não deve ser suavizado, porque é um ponto não diferenciável. Existe alguma opção de como pontos únicos de um gráfico podem ser excluídos da suavização? - O gráfico laranja é encerrado
\closedcycle
porque quero usar afill
opção mais tarde. Mas isso faz com que o gráfico salte primeiro para zero, como se pode ver na imagem. Existe alguma opção de fechar um gráfico por uma linha reta do final ao ponto inicial?
Responder1
Se você puder usar o mais recentepgfplots
versão (1.10), inclui uma nova fillbewteen
biblioteca que pode preencher qualquer área entre duas curvas.
Você precisa atribuir um nome a cada caminho ( name path=
) e posteriormente usar esses nomes para preencher as áreas entre eles.
Com esta solução não há problema com « or
pontos suaves não diferenciáveis».
\documentclass[border=3mm]{standalone}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
%\pgfplotsset{compat=1.9}
\usepgfplotslibrary{fillbetween}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=center,
xtick=\empty,
ytick=\empty,
plot a/.style={semithick,red,smooth},
plot b/.style={semithick,blue,smooth},
plot error/.style={thick,orange,smooth},
]
\addplot[plot a, name path=A] coordinates {
(1.400,0.484) (1.450,0.464) (1.500,0.442) (1.550,0.419) (1.600,0.395) (1.650,0.370)
(1.700,0.346) (1.750,0.321) (1.800,0.297) (1.850,0.273) (1.900,0.249) (1.950,0.227)
(2.000,0.205) (2.050,0.185) (2.100,0.166) (2.150,0.148) (2.200,0.131) (2.250,0.116)
(2.300,0.102) (2.350,0.089) (2.400,0.077) (2.450,0.067) (2.500,0.057) };
\addplot[plot b, name path=B] coordinates {
(1.400,0.111) (1.450,0.120) (1.500,0.130) (1.550,0.139) (1.600,0.150) (1.650,0.160)
(1.700,0.171) (1.750,0.183) (1.800,0.194) (1.850,0.206) (1.900,0.218) (1.950,0.230)
(2.000,0.242) (2.050,0.254) (2.100,0.266) (2.150,0.278) (2.200,0.290) (2.250,0.301)
(2.300,0.312) (2.350,0.323) (2.400,0.333) (2.450,0.343) (2.500,0.352) };
%\addplot[plot error, name path=C] coordinates{
%(2.300,0.312) (2.250,0.301) (2.200,0.290) (2.150,0.278) (2.100,0.266) (2.050,0.254)
%(2.000,0.242) (1.950,0.230) (1.946,0.2287) (1.950,0.227) (2.000,0.205) (2.050,0.185)
%(2.100,0.166) (2.150,0.148) (2.200,0.131) (2.250,0.116) (2.300,0.102) } \closedcycle;
%\draw[name path=vertical] (axis cs:2.3,0)--(axis cs:2.3,5);
\addplot[fill=none] fill between [of=A and B,
soft clip={domain=1:2.3},
split,
every segment no 1/.style={fill=orange}];
\end{axis}
\end{tikzpicture}
\end{document}