
Мне интересно, возможно ли использовать пользовательское изображение (например, график) вместо текста внутри легенды диаграммы, созданной с помощью pgfplots. В частности, учитывая этот MWC:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\tikzset{every mark/.append style={scale=0.75}}
\begin{tikzpicture}
\begin{axis}[xlabel=$x$, ymin=0, xmin=-1.1, xmax=1.1, samples=300, ylabel=$f(x)$,
smooth,
legend style={ legend cell align=left, at={(1.03, 1)}, anchor=north west}
]
\addplot coordinates {
(-1, 0)
(0, 0.5)
(1, 1)
};
\addlegendentry{Uniform(0,1)};
\addplot coordinates {
(-1, 1)
(0, 0.2)
(1, 0)
};
\addlegendentry{Exponential(1)};
\end{axis}
\end{tikzpicture}
\end{document}
что создает диаграмму ниже
Я хотел бы вставить фактическую функцию плотности равномерного распределения в текст легенды, например, я хочу увидеть это (в уменьшенном масштабе)
вместо текста "Uniform(0, 1)". Конечно, аналогично для части Exponential(1).
График Uniform PDF также создается с помощью pgfplots (MWC ниже), поэтому вопрос, возможно, заключается в том, можно ли встроить pgfplot в запись легенды.
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\tikzset{every mark/.append style={scale=0.75}}
\begin{tikzpicture}
\begin{axis}[ymin=0, xmin=0, xmax=1, ymax=2,xticklabels=none, yticklabels=none]
\addplot[color=black, fill=black] (x,1) \closedcycle;
\end{axis}
\end{tikzpicture}
\end{document}
Позже Править
Предложенное Торбьорном решение работает; оно делает то, что мне нужно:
Я оставлю этот вопрос открытым, чтобы посмотреть, есть ли другая возможность генерировать все «на лету», без внедрения ранее скомпилированных файлов.
решение1
(Это полностью переписанная версия моего первоначального ответа)
Чтобы изменить описание записи легенды, можно использовать \addlegendentry
, legend entries
, или \legend
. Следовательно, ответ @Torbjorns — это то, что нужно.
Однако вы можете свободно вставлять небольшие картинки в текст легенды; ограничений на текст нет. Для этого вы можете просто написать \tikz ... ;
вместо, скажем, «Uniform».
Вот подход, основанный на ответе @Torbjorns и моих попытках собрать более-менее подходящее изображение:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\tikzset{every mark/.append style={scale=0.75}}
\begin{tikzpicture}
\begin{axis}[xlabel=$x$, ymin=0, xmin=-1.1, xmax=1.1, samples=300, ylabel=$f(x)$,
smooth,
legend style={ legend cell align=left, at={(1.03, 1)}, anchor=north west}
]
\addplot coordinates {
(-1, 0)
(0, 0.5)
(1, 1)
};
\addlegendentry{
\begin{tikzpicture}
\fill[draw] (0cm,0cm) rectangle (0.6cm,-0.15cm);
\draw (0cm,0cm) rectangle (0.6cm,+0.15cm);
\end{tikzpicture}
}
\addplot coordinates {
(-1, 1)
(0, 0.2)
(1, 0)
};
\addlegendentry{
\tikz\draw[mark=none,samples=11,domain=-2.5:2.5,xshift=1em,yshift=-0.05cm,xscale=0.015,yscale=0.03] plot (\x,{exp(-(\x)^2)});
}
\end{axis}
\end{tikzpicture}
\end{document}
решение2
Не прямой ответ, но, по крайней мере, обходной путь: вы можете использовать \includegraphics
в записи легенды, поэтому вы можете сначала скомпилировать код, генерирующий равномерное распределение, а затем использовать
\addlegendentry{\includegraphics[width=1cm]{FilenameOfPDFwithUniformDist}};
чтобы добавить изображение в легенду.