데이터의 변화가 매우 작을 때 부동 소수점 수 그리기

데이터의 변화가 매우 작을 때 부동 소수점 수 그리기

다음 데이터를 플롯하고 싶습니다. CSV 파일과 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),

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

나는이 음모를 얻고있다

최소한의 작업 환경:

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

답변1

이러한 차이는 PGFPlot이 처리하기에는 너무 작습니다. gnuplot레이블을 사용하고 "위장"하여 모든 숫자에서 고정된 금액을 빼면 이 문제를 해결할 수 있습니다 .

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

하지만 솔직하게 말하면 버퍼 크기가 손실 확률에 미치는 영향을 표시하는 다른 방법을 찾아야 할 것입니다. (이 효과가 실제이거나 중요하다고 확신합니까?)

답변2

이는 다음을 사용하는 해결 방법입니다.LuaTeX

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

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

답변3

에서와 동일한 결과를 얻을 수 있습니다.AboAmmar의 답변PDFLaTeX에서도 패키지를 사용하여xintexpr임의의 자릿수를 가진 숫자를 처리할 수 있습니다.

\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는 다음을 생성합니다.

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

아마도 더 일반적인 경우에는 표현식 이후에 중괄호가 필요할 것입니다 y expr(특히 표현식에서 인수를 구분하기 위해 쉼표가 있는 함수를 사용한 경우).

관련 정보