로그 y축을 사용하여 pgfplots 3D

로그 y축을 사용하여 pgfplots 3D

3D 플롯에 로그 y축이 필요하지만 생성된 플롯도 음의 y 범위(축 레이블이 아니라 y 도메인)에 있는 것 같습니다. y-도메인은 -1:1인 것 같습니다(실제로는 그렇습니다. 그러나 "10^y" -> y-도메인=0.1:10(코드의 설명 참조) 때문에 작동해야 한다고 생각합니다).

내 코드에 이 게시물을 사용했습니다. 대수 x 및 y 축을 사용한 3D 표면 플롯

플롯 1 - 선형 y축, 플롯 2 - 로그 y축(시도)

여기에 이미지 설명을 입력하세요

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}

나는 다음과 같은 것을 기대합니다(Mathematica에서 생성된 플롯 - 로그 y축 포함):

여기에 이미지 설명을 입력하세요

답변1

너무 복잡하게 생각하셨나봐요. / domain y에 따라 조정하면 원하는 결과를 얻을 수 있습니다.yminymax

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

위 코드의 결과를 보여주는 이미지

답변2

방정식에서 10^y당 모든 y를 대입하면 더 유사한 결과를 얻을 수 있다고 생각합니다. 다음을 참조하세요.

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

여기에 이미지 설명을 입력하세요

주황색 표면 바닥의 둥근 모양은 표면을 다듬고 보다 연속적인 플롯을 만드는 Mathematica의 기능일 수 있습니다. 또는 tikz를 사용하면 F(x,y,z)= G(x,y,z)-h(x,y,z)와 같은 다른 수학적 함수의 뺄셈을 수행하여 원하는 표면 모양을 얻을 수 있습니다.

관련 정보