pgfplots 3D com log do eixo y

pgfplots 3D com log do eixo y

Preciso de um log do eixo y para meu gráfico 3D, mas de alguma forma parece que o gráfico gerado também está no intervalo y negativo (não nos rótulos dos eixos, mas no domínio y). O domínio y parece ser -1:1 (na verdade é, mas pensei que deveria funcionar por causa de "10 ^ y" -> domínio y = 0,1:10 (veja o comentário no código)).

Usei esta postagem para meu código: Gráfico de superfície 3D com eixo logarítmico xey

Gráfico 1 - eixo lin y, Gráfico 2 - eixo log y (tentativa)

insira a descrição da imagem aqui

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}

Espero algo assim (Plote gerado no Mathematica - com log do eixo y):

insira a descrição da imagem aqui

Responder1

Eu acho que você pensou muito complicado. Basta adaptar domain yde acordo com ymin/ ymaxe você obtém o resultado desejado...

% 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}

imagem mostrando o resultado do código acima

Responder2

Eu acho que se você substituir cada y por 10^y na equação você pode obter um resultado mais semelhante, veja isto:

\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}

insira a descrição da imagem aqui

A forma arredondada na parte inferior da superfície laranja pode ser a capacidade do Mathematica de aparar a superfície e criar gráficos mais contínuos. Alternativamente, usando tikz você é capaz de obter a forma desejada de superfície realizando subtrações de outras funções matemáticas, como F(x,y,z)= G(x,y,z)-h(x,y,z)

informação relacionada