Como plotar dados próximos de zero no gráfico de log pgfplots?

Sep 04 2020

Estou tentando gerar um gráfico de log de alguns dados usando pgfplots. A maior parte do tempo está com a aparência que desejo, mas gostaria que o gráfico mostrasse os dados continuando em direção à origem, em vez de parar no ponto de dados x=0.05.

Eu tentei adicionar um extra ytickpara 0, e isso distorce terrivelmente a aparência das coisas, como esperado. Eu também tentei adicionar um ponto de dados "falso" (do qual eu poderia remover o ponto (?)) Aproximadamente no lugar certo da trama, mas isso é entediante, sujeito a erros e [francamente] desonesto.

Fiz grandes avanços com o LaTeX por meio de pesquisas na Internet. No entanto, neste caso, meu google-fu me falha.

Como posso fazer com que o gráfico se estenda em direção à origem (enquanto a origem permanece "fora da tela")? Para ser claro, gostaria que a janela x / y permanecesse como está - quero apenas que o gráfico continue até a borda, em vez de parar no ponto de dados x=0.05.

Este código provavelmente é uma bagunça, então peço desculpas antecipadamente por qualquer coisa aqui que seja feita de uma maneira terrível.

\begin {figure}[H]
\centering
\begin{tikzpicture}
    \begin{axis}[
        xlabel={$v_D$ (\si{\volt})},
        ylabel={$i_D$ (\si{\ampere})},
        ytick={0.00000001, 0.0000001, 0.000001, 0.00001, 0.0001, 0.001},
        yticklabels={$\SI{10}{\nano\ampere}$, $\SI{100}{\nano\ampere}$, $\SI{1}{\micro\ampere}$, $\SI{10}{\micro\ampere}$, $\SI{100}{\micro\ampere}$, $\SI{1}{\milli\ampere}$},
        ymode=log,
        ymajorgrids=true,
        legend pos=outer north east,
    ]

        \addplot table{
-1.000  -1.429E-08
0   0.000E+00
0.05    2.343E-08
0.10    8.547E-08
0.15    2.497E-07
0.20    6.842E-07
0.25    1.831E-06
0.30    4.843E-06
0.35    1.265E-05
0.40    3.227E-05
0.45    7.824E-05
0.50    1.726E-04
0.55    3.340E-04
0.60    5.646E-04
0.65    8.532E-04
0.70    1.210E-03
        };
        \addlegendentry{$i_D$}

        % diagonal extension line
        \addplot[mark=none, black, dotted, line width = 1] coordinates {
            (0, 2E-08) (0.45,7.824E-05)
        };
    \end{axis}
\end{tikzpicture}
\caption{Finding $I_S$}
\label{fig:3_is}
\end {figure}

Respostas

1 Rmano Sep 04 2020 at 15:32

Não tenho tempo agora para derivar os parâmetros da equação do diodo 😏, mas e quanto a isso?

Você acabou de substituir o valor atual correto para o ponto em $V_D=\SI{0.01}{V}$ (por falar nisso, $v_{\scriptscriptstyle D}$ parece melhor ;-), até tenho uma macro para isso).

Em seguida, você corrige manualmente o intervalo ( xmin=0, xmax=0.6, enlarge x limits, ymin=1e-8, ymax=4e-3) e o gráfico (eu adicionei, smoothmas isso é uma questão de gosto).

A chave enlarge x limitsé usada para ter o mesmo efeito que o eixo x "expandido" que você tem.

A parte externa do gráfico é recortada automaticamente (veja a descrição da chave clip mode).

Obviamente, você pode fazer o mesmo do outro lado (adicione um valor para 0,9 V, por exemplo).

\documentclass[border=10pt]{standalone}
\usepackage{tikz, siunitx}
\usepackage{pgfplots}\pgfplotsset{compat=1.13}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xmin=0, xmax=0.7, enlarge x limits,
        ymin=1e-8, ymax=4e-3,
        xlabel={$v_D$ (\si{\volt})},
        ylabel={$i_D$ (\si{\ampere})},
        ytick={0.00000001, 0.0000001, 0.000001, 0.00001, 0.0001, 0.001},
        yticklabels={$\SI{10}{\nano\ampere}$, $\SI{100}{\nano\ampere}$, $\SI{1}{\micro\ampere}$, $\SI{10}{\micro\ampere}$, $\SI{100}{\micro\ampere}$, $\SI{1}{\milli\ampere}$},
        ymode=log,
        ymajorgrids=true,
        legend pos=outer north east,
        ]
        % first point added semi-"randomly", substitute the correct value
        \addplot+[smooth] table{
                0.01    4.0E-09
                0.05    2.343E-08
                0.10    8.547E-08
                0.15    2.497E-07
                0.20    6.842E-07
                0.25    1.831E-06
                0.30    4.843E-06
                0.35    1.265E-05
                0.40    3.227E-05
                0.45    7.824E-05
                0.50    1.726E-04
                0.55    3.340E-04
                0.60    5.646E-04
                0.65    8.532E-04
                0.70    1.210E-03
            };
        \addlegendentry{$i_D$}

            % diagonal extension line
            % just to show that you can use TikZ normal drawing commands here
            \draw[mark=none, black, dotted, line width = 1] 
                    (0, 2E-08) -- (0.45,7.824E-05);
        \end{axis}
    \end{tikzpicture}
\end{document}