Pgfplots: Erstellen eines Balkendiagramms

Pgfplots: Erstellen eines Balkendiagramms

Die folgende Abbildung ist ein Umfrageergebnis aus Google Docs. Ich versuche, mit LaTeX (umseitig) ein ähnliches Balkendiagramm zu erstellen, konnte bisher jedoch nicht dieselben Ergebnisse erzielen. Google Dokumente

Umseitig Die obige Ausgabe ist das Ergebnis dessen, was ich bisher erhalten habe. Die Probleme, die ich habe, sind:

  1. Ich konnte nicht herausfinden, wie ich die Prozentsätze neben jedem Balken und jeder Zahl anzeigen kann (es werden nur die Zahlen angezeigt).

  2. „Nicht alphanumerische Symbole (Satzzeichen, #, &, @ usw.)“ musste ebenfalls bearbeitet werden, da beim Versuch, diese beizubehalten, die anderen 3 Einträge (Zahlen, Großbuchstaben, Kleinbuchstaben) und ihre Balken verschwunden waren.

  3. Ich verwende es \documentclass[sigconf, nonacm, 12 pt, a4paper]{acmart}, sodass es zweispaltig ist. Wie kann ich das Diagramm über beide Spalten spannen? Ich verstehe, dass {figure*} den Trick machen soll, aber das Diagramm sieht trotzdem ein bisschen komisch aus.

Dies ist der Code, den ich zum Erstellen des Diagramms verwendet habe:

\documentclass[sigconf, nonacm, 12 pt, a4paper]{acmart}
\usepackage{amsmath} 
\usepackage{pgf-pie}  
\usepackage{pgfplots} 
\pgfplotsset{compat=1.8} 
\usepackage{graphicx} 
\usepackage{xcolor} 
\usepackage{tikz}

\begin{document}

Text...

\begin{figure*} 
\centering
\caption{Characters Included in a Password}
\label{fig:Chara}
\begin{tikzpicture}
\begin{axis}[
xbar, xmin=0,
symbolic y coords={Nonalphanumeric symbols "punctuation marks etc.",Numbers, Uppercase Letters, Lowercase Letters},
ytick=data,
nodes near coords, nodes near coords align={horizontal},
]
\addplot coordinates {(64,Nonalphanumeric symbols "punctuation marks etc.") (85,Numbers) (62,Uppercase Letters) (83,Lowercase Letters)};
\end{axis}
\end{tikzpicture}
\end{figure*}

\bibliographystyle{ACM-Reference-Format}
\bibliography{sample}


\end{document}

Sagen Sie mir Bescheid, wenn ich etwas übersehen habe.

Antwort1

Das ist vielleicht ein bisschen komplizierter, sieht aber besser aus. Ich leere die Ytick-Beschriftung und füge sie manuell \nodeaußerhalb der Achsenumgebung hinzu. Ich habe das im acmartUnterricht nicht gemacht, also habe ich das Verhalten in zwei Spalten nicht getestet. Ich hoffe, es wird gut funktionieren. Ich ändere auch die Position der Beschriftung unter der Abbildung. Ich denke, das ist Standard. Wenn das in Ihrem Fall nicht der Fall ist, verschieben Sie es einfach zurück. Hier ist der Code:

\documentclass[sigconf,nonacm,12pt,a4paper]{acmart}
\usepackage{amsmath} 
\usepackage{pgf-pie}  
\usepackage{pgfplots} 
\pgfplotsset{compat=1.8} 
\usepackage{graphicx} 
\usepackage{xcolor} 
\usepackage{tikz}

\begin{document}
Text...

\begin{figure*}[ht]
\centering
\begin{tikzpicture}
\begin{axis}[%
width=0.81\textwidth, height=3.5in,
xbar, bar width=20pt,
xmin=0, xmax=100,
symbolic y coords={Nonalphanumeric, Numbers, Uppercase Letters, Lowercase Letters},
ytick=\empty,
xmajorgrids
]
\addplot [fill=blue!30,draw=blue] coordinates {(64,Nonalphanumeric)  (85,Numbers) (62,Uppercase Letters) (83,Lowercase Letters)}
node [minimum size=0pt,inner sep=0pt,right,pin={[font=\footnotesize,pin distance=0.3cm]0:64 (52.5\%)}] at (axis cs:64,Nonalphanumeric) {}
node [minimum size=0pt,inner sep=0pt,right,pin={[font=\footnotesize,pin distance=0.3cm]0:85 (69.7\%)}] at (axis cs:85,Numbers) {}
node [minimum size=0pt,inner sep=0pt,right,pin={[font=\footnotesize,pin distance=0.3cm]0:62 (50.8\%)}] at (axis cs:62,Uppercase Letters) {}
node [minimum size=0pt,inner sep=0pt,right,pin={[font=\footnotesize,pin distance=0.3cm]0:83 (68\%)}] at (axis cs:83,Lowercase Letters) {}
coordinate (symb) at (axis cs:0,Nonalphanumeric)
coordinate (num) at (axis cs:0,Numbers)
coordinate (uprcase) at (axis cs:0,Uppercase Letters)
coordinate (lwrcase) at (axis cs:0,Lowercase Letters);
\end{axis}
\node [font=\small,above left] at (symb) {Nonalphanumeric symbols};
\node [font=\small,left] at (symb) {(punctuation marks,};
\node [font=\small,below left] at (symb) {\#, \&, @, etc.)};
\node [font=\small,left] at (num) {Numbers};
\node [font=\small,left] at (uprcase) {Uppercase Letters};
\node [font=\small,left] at (lwrcase) {Lowercase Letters};
\end{tikzpicture}
\caption{Characters Included in a Password}
\label{fig:Chara}
\end{figure*}

\bibliographystyle{ACM-Reference-Format}
\bibliography{sample}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Ich muss eine weitere Antwort hinzufügen. Dies ist ein viel einfacherer Ansatz. Kürzen Sie den Code erheblich. Und Sie benötigen keine zusätzlichen \nodeBefehle. Ich passe auch die Achsenrahmen und die Balkenfarbe den Google-Dokumenten an. Hier ist der Code:

\documentclass[sigconf,nonacm,12pt,a4paper]{acmart}
\usepackage{amsmath} 
\usepackage{pgf-pie}  
\usepackage{pgfplots} 
\pgfplotsset{compat=1.8} 
\usepackage{graphicx} 
\usepackage{xcolor}
\usepackage{tikz}

\begin{document}
Text...
\begin{figure*}[ht]
\centering
\begin{tikzpicture}
\begin{axis}[%
width=0.85\textwidth, height=3.5in,
xbar, bar width=20pt,
xmin=0, xmax=100,
symbolic y coords={symb, num, uprcase, lwrcase},
ytick=data,
yticklabels={{Nonalphanumeric symbols (punctuation marks, \#, \&, @, etc.)},Numbers,Uppercase Letters,Lowercase Letters},
y tick label style={align=right,text width=3.2cm},
xtick={0,20,40,60,80,100},
xmajorgrids,
axis line style={lightgray},
major tick style={draw=none},
nodes near coords,
point meta=explicit symbolic,
node near coords style={font=\footnotesize,right=1em,pin={[pin distance=1em]180:}}
]
\addplot [fill={rgb:red,23;green,105;blue,170},draw=none] coordinates {(64,symb) [64 (52.5\%)]  (85,num) [85 (69.7\%)] (62,uprcase) [62 (50.8\%)] (83,lwrcase) [83 (68\%)]};
\draw [line width=1.5pt] (current axis.south west) -- (current axis.north west);
\end{axis}
\end{tikzpicture}
\caption{Characters Included in a Password}
\label{fig:Chara}
\end{figure*}

\bibliographystyle{ACM-Reference-Format}
\bibliography{sample}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen