Hier macht sich wieder einmal bemerkbar, dass TeX nicht mit Zeichen, sondern mit Token arbeitet und ein Token aus einem Zeichen und einer Kategorie besteht. Die Festlegung der Token erfolgt zu einem frühen Zeitpunkt im Tokenizer.
Das Problem hier ist nicht `xparse`, sondern die `expl3`. Die `expl3`-Anweisung `\ExplSyntaxOn` verändert die Kategorie-Codes diverser Zeichen. `tikz` ist jedoch in seinem eigenen Parser darauf angewiesen, dass diverse Zeichen bestimmte Kategorie-Codes haben. In Deinem Beispiel ist vor allem die Änderung beim Doppelpunkt von *other* auf *letter* problematisch:
\documentclass{article}
\usepackage{xparse}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,axis lines=middle}
\ExplSyntaxOn
\char_set_catcode_other:n {58}
\NewDocumentCommand \Diagramm {}
{
\begin{tikzpicture}
\begin{axis}[xmin=0,xmax=13.8,ymin=0,ymax=58]
\addplot[domain=0:13] {4*x};
\end{axis}
\end{tikzpicture}
}
\ExplSyntaxOff
\begin{document}
\Diagramm
\end{document}
Würde funktionieren, ebenso
\documentclass{article}
\usepackage{xparse}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,axis lines=middle}
\NewDocumentCommand \Diagramm {}
{
\begin{tikzpicture}
\begin{axis}[xmin=0,xmax=13.8,ymin=0,ymax=58]
\addplot[domain=0:13] {4*x};
\end{axis}
\end{tikzpicture}
}
\begin{document}
\Diagramm
\end{document}
weil für `xparse` selbst kein `\ExplSyntaxOn` benötigt wird, das benötigt man nur, wenn man tatsächlich expl3-Syntax verwendet, also Befehle wie beispielsweise obiges `\char_set_catcode_other:n`.
Folgendes würde übrigens aus denselben Gründen nicht funktionieren:
\documentclass{article}
\usepackage{xparse}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,axis lines=middle}
\catcode`:=11\relax
\NewDocumentCommand \Diagramm {}
{
\begin{tikzpicture}
\begin{axis}[xmin=0,xmax=13.8,ymin=0,ymax=58]
\addplot[domain=0:13] {4*x};
\end{axis}
\end{tikzpicture}
}
\catcode`:=12\relax
\begin{document}
\Diagramm
\end{document}
Übrigens funktioniert auch das und zeigt ebenfalls, wie Token hier eine Rolle spielen:
\documentclass{article}
\usepackage{xparse}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,axis lines=middle}
\catcode`\%=\active
\def%{:}
\ExplSyntaxOn
\NewDocumentCommand \Diagramm {}
{
\begin{tikzpicture}
\begin{axis}[xmin=0,xmax=13.8,ymin=0,ymax=58]
\addplot[domain=0%13] {4*x};
\end{axis}
\end{tikzpicture}
}
\ExplSyntaxOff
\catcode`\%=14\relax
\begin{document}
\Diagramm
\end{document}
Dabei wird das Prozentzeichen `%` vorrübergehend zu einem aktiven Zeichen gemacht, das zu einem `:`-Token der Kategorie *other* (das ist die Standardkategorie des Doppelpunkts) expandiert. Daher kann das `%` bei der `domain`-Angabe an Stelle des `:` verwendet werden. Solche Tricksereien sind bei TeX nichts wirklich ungewöhnliches, machen es aber umso schwerer, TeX-Code zu analysieren.