Plotando um número de ponto flutuante quando as alterações são muito pequenas nos dados

Plotando um número de ponto flutuante quando as alterações são muito pequenas nos dados

Quero plotar os seguintes dados, estou usando o arquivo CSV e o pacote pgfplotstable.

  1. (0,2.42130785530195E-02),
  2. (113.8,2.42130785530195E-02),
  3. (227.6,2.42130781357695E-02),
  4. (341.3,2.42130779271445E-02),
  5. (455.1,2.42130777185196E-02),
  6. (568.9,2.42130775098946E-02),
  7. (682,7,2,42130773012696E-02),
  8. (796.4,2.42130770926447E-02),
  9. (910.2,2.42130768840197E-02),
    1. (1024,2.42130766753947E-02),

insira a descrição da imagem aqui

Estou entendendo esse enredo

O ambiente de trabalho mínimo:

\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{siunitx}

\begin{document}
\pgfplotstableread[col sep = comma]{lossprob_jin1.csv}\loadedtable

\begin{figure*}
\centering
\begin{tikzpicture}
\begin{axis} [xlabel=Buffer-Size (bits),ylabel=Loss Probability (\%), legend entries = {H=0.6448}]
\addplot table [x=xsw, y=plp, col sep=comma] {\loadedtable} ;
\end{axis}
\end{tikzpicture}
\end{figure*}
\end{document}

Responder1

Essas diferenças são muito pequenas para serem tratadas pelo PGFPlots. Você pode contornar isso subtraindo um valor fixo de todos os números usando gnuplote "falsificando" os rótulos:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    scaled y ticks=false,
    y tick label style={
        /pgf/number format/fixed,
        /pgf/number format/precision=0
    },
    yticklabel=0.02421307\pgfmathprintnumber{\tick},
    x tick label style={
        /pgf/number format/1000 sep={}
    },
    xlabel=Buffer size in bits,
    ylabel=Loss proabiblity in \%
]
\addplot[raw gnuplot, mark=*] gnuplot {
    plot 'data.dat' using 2:($1-0.02421307)*1e10;
};
\end{axis}
\end{tikzpicture}
\end{document}

Mas, honestamente, você provavelmente deveria encontrar outra maneira de exibir o efeito do tamanho do buffer na probabilidade de perda (você tem certeza de que esse efeito é real ou significativo?)

Responder2

Esta é uma solução alternativa usandoLuaTeX

\documentclass{standalone}
\usepackage{tikz,pgfplots,pgfplotstable}
\pgfplotsset{compat=1.12} 
\usepackage{siunitx}
\begin{document}
\pgfplotstableread
{
x y 
0     2.42130785530195E-02
113.8 2.42130783443945E-02
227.6 2.42130781357695E-02
341.3 2.42130779271445E-02
455.1 2.42130777185196E-02
568.9 2.42130775098946E-02
682.7 2.42130773012696E-02
796.4 2.42130770926447E-02
910.2 2.42130768840197E-02
1024  2.42130766753947E-02
}\Bsizeloss
\begin{tikzpicture}
  \begin{axis}[xlabel={Buffer-Size (bits)},
              ylabel={Loss Probability, \% ($\times 10^{10}-242130700$)},
              ytick={67,73,79,85}, 
              legend entries = {H=0.6448},
              grid = major
              ]
  \addplot+ table[y expr=\directlua{tex.print(\thisrow{y}*1E10-242130700)},x=x] {\Bsizeloss}; 
  \end{axis}
\end{tikzpicture}

insira a descrição da imagem aqui

Responder3

Você pode conseguir o mesmo que emA resposta de AboAmmartambém em PDFLaTeX, usando o pacotexintexprque pode lidar com números com número arbitrário de dígitos.

\documentclass{standalone}
\usepackage{tikz,pgfplots,pgfplotstable}
\pgfplotsset{compat=1.12} 
%\usepackage{siunitx}% seems not needed in this mwe
\usepackage{xintexpr}
\begin{document}
\pgfplotstableread
{
x y 
0     2.42130785530195E-02
113.8 2.42130783443945E-02
227.6 2.42130781357695E-02
341.3 2.42130779271445E-02
455.1 2.42130777185196E-02
568.9 2.42130775098946E-02
682.7 2.42130773012696E-02
796.4 2.42130770926447E-02
910.2 2.42130768840197E-02
1024  2.42130766753947E-02
}\Bsizeloss
\begin{tikzpicture}
  \begin{axis}[xlabel={Buffer-Size (bits)},
              ylabel={Loss Probability, \% ($\times 10^{10}-242130700$)},
              ytick={67,73,79,85}, 
              legend entries = {H=0.6448},
              grid = major
              ]
  \addplot+ table[y expr=\xintthefloatexpr\thisrow{y}*1E10-242130700\relax,x=x] {\Bsizeloss}; 
  \end{axis}
\end{tikzpicture}
\end{document}

PDFLaTeX produz:

insira a descrição da imagem aqui

Talvez em casos mais gerais seriam necessários colchetes para a expressão depois y expr(especialmente se a expressão usasse uma função com vírgulas para separar argumentos).

informação relacionada