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)
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):
Antwort1
Ich denke, du hast viel zu kompliziert gedacht. Passe es einfach domain y
entsprechend an ymin
und ymax
du 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}
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}
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).