pgfplots 3D mit logarithmischer Y-Achse

pgfplots 3D mit logarithmischer Y-Achse

Ich brauche eine logarithmische Y-Achse für mein 3D-Diagramm, aber irgendwie scheint das generierte Diagramm auch im negativen Y-Bereich zu liegen (nicht die Achsenbeschriftungen, sondern die Y-Domäne). Die Y-Domäne scheint -1:1 zu sein (tatsächlich ist sie das, aber ich dachte, es müsste wegen „10^y“ -> Y-Domäne=0,1:10 funktionieren (siehe Kommentar im Code)).

Ich habe diesen Beitrag für meinen Code verwendet: 3D-Oberflächendiagramm mit logarithmischer x- und y-Achse

Diagramm 1 – lin. y-Achse, Diagramm 2 – log. y-Achse (Versuch)

Bildbeschreibung hier eingeben

MWE:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\usepackage{tikz}

\begin{document}

\begin{figure}[h!]
\begin{tikzpicture}
\begin{axis} 
[scale = 1,
xlabel = {$\sigma$},
xmin = -10, xmax = 10,
ylabel = {$\omega$},
ymin = 0.1, ymax = 10,
zlabel={$A$},
zmin = -40, zmax = 20,
colormap/viridis]

\addplot3[
surf,
samples=40,
domain=-1:10,
domain y=0:10]
(x, y, {20*log10(1/sqrt(((1.40845*y)+(2*x*y))^2+(1+(1.40845*x)+x^2-y^2)^2))});
\end{axis}
\end{tikzpicture}
\caption{Plot 1}
\end{figure}


\begin{figure}[h!]
\begin{tikzpicture}
\begin{axis} 
[scale = 1,
xlabel = {$\sigma$},
xmin = -10, xmax = 10,
ylabel = {$\omega$},
ymin = 1e-1, ymax = 1e1,
zlabel={$A$},
zmin = -40, zmax = 20,
ymode=log,        %added ymode
colormap/viridis]

\addplot3[
surf,
samples=40,
domain=-1:10,
domain y=-1:1]    %new y-domain (10^y in the next line) 
(x, 10^y, {20*log10(1/sqrt(((1.40845*y)+(2*x*y))^2+(1+(1.40845*x)+x^2-y^2)^2))});
\end{axis}
\end{tikzpicture}
\caption{Plot 2}
\end{figure}

\end{document}

Ich erwarte so etwas (in Mathematica erstelltes Diagramm – mit logarithmischer Y-Achse):

Bildbeschreibung hier eingeben

Antwort1

Ich denke, du hast viel zu kompliziert gedacht. Passe es einfach domain yentsprechend an yminund ymaxdu erhältst das gewünschte Ergebnis ...

% used PGFPlots v1.16
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    \pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        view={50}{50},
        width=\axisdefaultwidth,
        height=5cm,
        xlabel={$\sigma$},
        xmin=-1, xmax=10,
        ylabel={$\omega$},
        ymin=1e-1, ymax=1e1,
        zlabel={$A$},
        zmin=-40, zmax=20,
        ymode=log,
        colormap/viridis,
]
        \addplot3[
            surf,
            samples=40,
            domain=-1:10,
            domain y=0.1:10,    % <-- adapted
        % (no need to use a parametric plot)
        ] {20*log10(1/sqrt(((1.40845*y)+(2*x*y))^2+(1+(1.40845*x)+x^2-y^2)^2))};
    \end{axis}
\end{tikzpicture}
\end{document}

Bild, das das Ergebnis des obigen Codes zeigt

Antwort2

Ich denke, dass Sie ein ähnlicheres Ergebnis erhalten, wenn Sie in der Gleichung jedes y pro 10^y einsetzen, siehe hier:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\begin{axis} 
[scale = 1,
xlabel = {$\sigma$},
xmin = -10, xmax = 10,
ylabel = {$\omega$},
ymin = 1e-1, ymax = 1e1,
zlabel={$A$},
zmin = -40, zmax = 20,
ymode=log,        %added ymode
view={60}{45},
colormap/viridis]

\addplot3[
surf,
samples=100,
domain=-1:9,
domain y=-1:1]    %new y-domain (10^y in the next line) 
(x, 10^y, {20*log10(1/sqrt(((1.40845*(10^y))+(2*x*(10^y)))^2+(1+(1.40845*x)+x^2- 
(10^y)^2)^2))});
\end{axis}
\end{tikzpicture}

\end{document}

Bildbeschreibung hier eingeben

Die abgerundete Form am unteren Rand der orangefarbenen Oberfläche könnte eine Funktion von Mathematica sein, die Oberfläche auszuschneiden und kontinuierlichere Diagramme zu erstellen. Alternativ können Sie mit Tikz eine gewünschte Oberflächenform erreichen, indem Sie Subtraktionen anderer mathematischer Funktionen durchführen, wie z. B. F(x,y,z)= G(x,y,z)-h(x,y,z).

verwandte Informationen