我有两个并排的条形图,并且它们共享相同的图例,我曾尝试使用\addlegendentry{}
,但发现自己的图例重复了!
这是代码,我该怎么办(我尝试了网上的两种解决方案,但都没有用):
\begin{figure*}[h!]
\begin{adjustbox}{center}
\pgfplotsset{width=0.93\textwidth,height=0.4\textheight,compat=1.16}
\begin{tikzpicture}
\begin{axis}[
legend style={at={(0.5,-0.09)},
anchor=north,legend columns=-1},
symbolic x coords={Precision,Recall,F1-Score,Accuracy},
major tick length=0cm,
xtick=data,
ymin=75.0,
enlarge x limits=0.2,
enlarge y limits={upper,value=0.2},
nodes near coords,
ybar,
every node near coord/.append style={rotate=90, anchor=west},
bar width = 8pt,
]
\addplot
coordinates {(Precision,86.6) (Recall,86.0) (F1-Score,86.3) (Accuracy,98.4)};
\addlegendentry{KNN}
\addplot
coordinates {(Precision,87.6) (Recall,86.2) (F1-Score,86.5) (Accuracy,97.5)};
\addlegendentry{Neural Networks}
\addplot
coordinates {(Precision,85.9) (Recall,86.3) (F1-Score,86.1) (Accuracy,98.6)};
\addlegendentry{Decision Tree}
\addplot
coordinates {(Precision,87.1) (Recall,86.8) (F1-Score,87.0) (Accuracy,99.2)};
\addlegendentry{Random Forest}
\addplot
coordinates {(Precision,85.5) (Recall,82.8) (F1-Score,83.7) (Accuracy,97.4)};
\addlegendentry{SVM}
\addplot
coordinates {(Precision,77.9) (Recall,77.7) (F1-Score,75.9) (Accuracy,87.8)};
\addlegendentry{Naive Bayes}
\end{axis}
\end{tikzpicture}% NO EMPTY LINE HERE!!!!
\begin{tikzpicture}
\begin{axis}[
legend style={at={(0.5,-0.09)},
anchor=north,legend columns=-1},
symbolic x coords={FPR,FNR},
major tick length=0cm,
xtick=data,
ymin=0.0,
enlarge x limits=0.5,
enlarge y limits={upper,value=0.2},
nodes near coords,
ybar,
every node near coord/.append style={rotate=90, anchor=west},
bar width = 15pt,
]
\addlegendentry{KNN}
\addplot
coordinates {(FPR,7.90) (FNR,14.0)};
\addlegendentry{Neural Networks}
\addplot
coordinates {(FPR,3.45) (FNR,13.75)};
\addlegendentry{Decision Tree}
\addplot
coordinates {(FPR,0.39) (FNR,13.63)};
\addlegendentry{Random Forest}
\addplot
coordinates {(FPR,0.31) (FNR,13.13)};
\addlegendentry{SVM}
\addplot
coordinates {(FPR,5.38) (FNR,17.11)};
\addlegendentry{Naive Bayes}
\addplot
coordinates {(FPR,3.63) (FNR,22.19)};
\end{axis}
\end{tikzpicture}
\end{adjustbox}
\caption{Left - No Interaction. Right - Interaction} \label{fig:M}
\end{figure*}
答案1
groupplots
这是使用基于库的简化代码的提议
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[group style={group size=2 by 1},width=12cm,height=8cm]
\nextgroupplot[
%legend style={at={(mygroup.south)},anchor=north,legend columns=-1},
symbolic x coords={Precision,Recall,F1-Score,Accuracy},
major tick length=0cm,
xtick=data,
ymin=75.0,
enlarge x limits=0.2,
enlarge y limits={upper,value=0.2},
nodes near coords,
ybar,
every node near coord/.append style={rotate=90, anchor=west},
bar width = 8pt,
]
\addplot coordinates {(Precision,86.6) (Recall,86.0) (F1-Score,86.3) (Accuracy,98.4)};
\addplot coordinates {(Precision,87.6) (Recall,86.2) (F1-Score,86.5) (Accuracy,97.5)};
\addplot coordinates {(Precision,85.9) (Recall,86.3) (F1-Score,86.1) (Accuracy,98.6)};
\addplot coordinates {(Precision,87.1) (Recall,86.8) (F1-Score,87.0) (Accuracy,99.2)};
\addplot coordinates {(Precision,85.5) (Recall,82.8) (F1-Score,83.7) (Accuracy,97.4)};
\addplot coordinates {(Precision,77.9) (Recall,77.7) (F1-Score,75.9) (Accuracy,87.8)};
%\legend{KNN,Neural Networks,Decision Tree,Random Forest,SVM,Naive Bayes}
\nextgroupplot[
legend style={at={(-\pgfkeysvalueof{/pgfplots/group/horizontal sep}/2,-0.1)},
anchor=north,legend columns=-1},
symbolic x coords={FPR,FNR},
major tick length=0cm,
xtick=data,
ymin=0.0,
enlarge x limits=0.5,
enlarge y limits={upper,value=0.2},
nodes near coords,
ybar,
every node near coord/.append style={rotate=90, anchor=west},
bar width = 15pt,
]
\addplot coordinates {(FPR,7.90) (FNR,14.0)};
\addplot coordinates {(FPR,3.45) (FNR,13.75)};
\addplot coordinates {(FPR,0.39) (FNR,13.63)};
\addplot coordinates {(FPR,0.31) (FNR,13.13)};
\addplot coordinates {(FPR,5.38) (FNR,17.11)};
\addplot coordinates {(FPR,3.63) (FNR,22.19)};
\legend{KNN,Neural Networks,Decision Tree,Random Forest,SVM,Naive Bayes}
\end{groupplot}
\end{tikzpicture}
\end{document}
答案2
非常感谢先生回答我。我找到了一个简单的解决方案
\begin{figure*}[h!]
\begin{adjustbox}{center}
\pgfplotsset{width=0.93\textwidth,height=0.4\textheight,compat=1.16}
\begin{tikzpicture}
\begin{axis}[
legend columns=-1,
legend entries={KNN, Neural Networks, Decision Tree, Random Forest, SVM, Naive Bayes},
legend to name=named,
legend style={at={(0.5,-0.09)},
anchor=north,legend columns=-1},
symbolic x coords={Precision,Recall,F1-Score,Accuracy},
major tick length=0cm,
xtick=data,
ymin=75.0,
enlarge x limits=0.2,
enlarge y limits={upper,value=0.2},
nodes near coords,
ybar,
every node near coord/.append style={rotate=90, anchor=west},
bar width = 8pt,
]
\addplot
coordinates {(Precision,86.6) (Recall,86.0) (F1-Score,86.3) (Accuracy,98.4)};
\addplot
coordinates {(Precision,87.6) (Recall,86.2) (F1-Score,86.5) (Accuracy,97.5)};
\addplot
coordinates {(Precision,85.9) (Recall,86.3) (F1-Score,86.1) (Accuracy,98.6)};
\addplot
coordinates {(Precision,87.1) (Recall,86.8) (F1-Score,87.0) (Accuracy,99.2)};
\addplot
coordinates {(Precision,85.5) (Recall,82.8) (F1-Score,83.7) (Accuracy,97.4)};
\addplot
coordinates {(Precision,77.9) (Recall,77.7) (F1-Score,75.9) (Accuracy,87.8)};
\end{axis}
\end{tikzpicture}% NO EMPTY LINE HERE!!!!
\begin{tikzpicture}
\begin{axis}[
legend style={at={(0.5,-0.09)},
anchor=north,legend columns=-1},
symbolic x coords={FPR,FNR},
major tick length=0cm,
xtick=data,
ymin=0.0,
enlarge x limits=0.5,
enlarge y limits={upper,value=0.2},
nodes near coords,
ybar,
every node near coord/.append style={rotate=90, anchor=west},
bar width = 15pt,
]
\addplot
coordinates {(FPR,7.90) (FNR,14.0)};
\addplot
coordinates {(FPR,3.45) (FNR,13.75)};
\addplot
coordinates {(FPR,0.39) (FNR,13.63)};
\addplot
coordinates {(FPR,0.31) (FNR,13.13)};
\addplot
coordinates {(FPR,5.38) (FNR,17.11)};
\addplot
coordinates {(FPR,3.63) (FNR,22.19)};
\end{axis}
\end{tikzpicture}
\end{adjustbox}
\ref{named}
\caption{Left - No Interaction. Right - Interaction}
\label{fig:M}
\end{figure*}