pgfplots - como criar um gráfico de linha horizontal em um gráfico de barras com rótulos simbólicos do eixo x

pgfplots - como criar um gráfico de linha horizontal em um gráfico de barras com rótulos simbólicos do eixo x

Eu queria saber se havia uma maneira de fazer com que os gráficos de linha "Unseamed" e "Requirement" abrangessem toda a largura do gráfico, não apenas a partir dos pontos centrais do primeiro e do último rótulo do eixo x. Existe uma maneira de criar rótulos invisíveis no eixo x para conseguir isso?

\documentclass[a4paper,10pt]{report}

\usepackage{pgfplots}
\usetikzlibrary{patterns}


\begin{document}

\begin{figure}
 \centering

\begin{tikzpicture}
\begin{axis}[width=11cm,
ybar,
enlargelimits=0.3,legend style={at={(0.98,0.98)},
cells={anchor=west}
},
legend entries={Straight,Unseamed,Zigzag,Requirement},
bar width=1cm,legend columns=2,
ylabel={Tensile strength{,} $N\,mm^{-1}$},
symbolic x coords={Plain,Single lap,Double lap},
xtick=data,
ytick={0,2,4,6,8,10,12,14},
x tick label style={rotate=45,anchor=east},
]

\addplot [draw=black,pattern=crosshatch dots,error bars/.cd,y dir=both,y explicit,error bar style={line width=1pt}] 
coordinates
{
(Plain,7)+-(0.41,0.41)
(Single lap,11)+-(0.27,0.27)
(Double lap,12)+-(0.47,0.47)
};

\addplot[black,sharp plot]
coordinates {(Plain,10.857) (Double lap,10.857)}
;

\addplot [draw=black,error bars/.cd,y dir=both,y explicit,error bar style={line width=1pt}] 
coordinates
{
(Plain,4)+-(0.31,0.31)
(Single lap,5)+-(0.27,0.27)
(Double lap,6)+-(0.38,0.38)
};

\addplot[black,sharp plot,dashed]
coordinates {(Plain,3.430) (Double lap,3.430)}
;

\end{axis}
\end{tikzpicture}

\end{figure}

\end{document}

Responder1

Aqui está uma maneira um tanto indireta de conseguir isso. Primeiro adicione \coordinates em (Plain,3.43)e (Plain, 10.857)e nos cantos inferiores com o rel axis cssistema de coordenadas, depois desenhe linhas usando essas coordenadas como referência. As entradas de legenda são adicionadas com \addlegendimage.

Observe que as unidades geralmente não devem ser escritas em itálico, portanto, recomenda-se uma alteração. Você poderia fazer isso $\mathrm{N}\,\mathrm{mm}^{-1}$, mas uma maneira melhor de lidar com unidades é o siunitxpacote, que permite escrever \si{\newton\per\square\milli\metre}. Além disso, posso citar a unitsbiblioteca de pgfplots, cujas funcionalidades podem ser combinadas siunitxconforme o código abaixo (retirado do pgfplotsmanual).

insira a descrição da imagem aqui

\documentclass[border=2mm,tikz]{standalone}

\usepackage{pgfplots}
\usepgfplotslibrary{units}
\pgfplotsset{unit code/.code 2 args={\si{#1#2}}}
\usetikzlibrary{patterns}
\usepackage{siunitx}

\begin{document}

\begin{tikzpicture}
\begin{axis}[width=11cm,
ybar,
y unit=\newton\per\square\milli\metre,
enlargelimits=0.3,
legend style={
at={(0.98,0.98)},
cells={anchor=west},
column 3/.style={width=2cm}
},
legend entries={Straight,Unseamed,Zigzag,Requirement},
bar width=1cm,legend columns=2,
ylabel={Tensile strength},
symbolic x coords={Plain,Single lap,Double lap},
xtick=data,
ytick={0,2,4,6,8,10,12,14},
x tick label style={rotate=45,anchor=east},
]

\addplot [draw=black,pattern=crosshatch dots,error bars/.cd,y dir=both,y explicit,error bar style={line width=1pt}] 
coordinates
{
(Plain,7)+-(0.41,0.41)
(Single lap,11)+-(0.27,0.27)
(Double lap,12)+-(0.47,0.47)
};

\addlegendimage{line legend,black,sharp plot}

\addplot [draw=black,error bars/.cd,y dir=both,y explicit,error bar style={line width=1pt}] 
coordinates
{
(Plain,4)+-(0.31,0.31)
(Single lap,5)+-(0.27,0.27)
(Double lap,6)+-(0.38,0.38)
};

\addlegendimage{line legend,black,sharp plot,dashed}


\coordinate (A) at (axis cs:Plain,3.430);
\coordinate (B) at (axis cs:Plain,10.857);
\coordinate (O1) at (rel axis cs:0,0);
\coordinate (O2) at (rel axis cs:1,0);

\draw [black,sharp plot,dashed] (A -| O1) -- (A -| O2);
\draw [black,sharp plot] (B -| O1) -- (B -| O2);


\end{axis}
\end{tikzpicture}

\end{document}

informação relacionada