pgfplots의 데이터 플롯을 사용한 수학 연산

pgfplots의 데이터 플롯을 사용한 수학 연산

새 데이터 세트를 생성하지 않고 파란색 플롯과 함께 수학 연산을 사용하여 파란색 곡선을 오른쪽으로 10배만큼 이동할 수 있는 방법이 있습니까?

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

코드는 다음과 같습니다.

\documentclass[a4paper]{article}

\usepackage{pgfplots}
\usepackage{pgfplotstable}%fitting functions
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\usepackage{pgfplotstable}

%\pgfkeys{/pgf/number format/.cd,1000 sep={}}


\newcommand{\myfont}{\fontfamily{cmss}\fontseries{ul}\selectfont}% used with mathpazo 

\pgfdeclareplotmark{fat-}
{%
    \pgfsetlinewidth{1}
    \pgfpathmoveto{\pgfqpoint{\pgfplotmarksize}{0pt}}%
    \pgfpathlineto{\pgfqpoint{-\pgfplotmarksize}{0pt}}%
    \pgfusepathqstroke
}%

\pgfplotsset{/pgfplots/error bars/error bar style={very thick,blue,mark size=2.5},/pgfplots/error bars/error mark={fat-}}
%\pgfplotsset{/pgfplots/label shift={0pt}}

\pgfplotsset{compat=1.15}
\pgfplotsset{label style={font=\Large},
            tick label style={font=\Large}}

\pgfplotsset{error bars/.cd,
    x dir=both, x explicit,
    y dir=both, y explicit,
    }

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[
    xmode=log,
    ymode=log,
    enable tick line clipping=false,
    width=9cm,
    height=7cm,
    axis line style=semithick,
    legend style={at={(0.95,0.3)},draw=none},
    legend cell align={right},
    x tick style={black,semithick},
    x label style=
        {at={(ticklabel cs:0.5)},anchor=near ticklabel},
    xlabel={$x$},
    xmin=1,xmax=1000,
    xtick={1,10,100,1000},
    xtick pos=bottom,
    minor x tick num=9,
    xtick align=outside,
    y tick style={black,semithick},
    y label style=
        {at={(ticklabel cs:0.5)},anchor=near ticklabel},
    ylabel={$y$},
    ymin=0.5,ymax=5,
    ytick={0.1,0.5,1,3,5,10},
    ytick pos=left,
    minor y tick num=9,
    ytick align=outside,
]        
    \addplot [blue,mark=*,mark options={scale=1.5,blue}]
         table [x=x,y=y] {
         x      y
         2      0.8
         10     1
         50     3
    };

    \addplot [red,mark=*,mark options={scale=1.5,red}] table [x=x,y=y] {
        x       y
        20      0.8
        100     1
        500     3
    };

\end{axis}
\end{tikzpicture}
\end{figure}


\end{document}

답변1

\pgfplotstableread다음을 사용하여 x 표현식을 변경하여 테이블을 한 번 사용하고 다시 사용할 수 있습니다 x expr.

\documentclass[a4paper]{article}

\usepackage{pgfplots}
\usepackage{pgfplotstable}%fitting functions
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\usepackage{pgfplotstable}

%\pgfkeys{/pgf/number format/.cd,1000 sep={}}


\newcommand{\myfont}{\fontfamily{cmss}\fontseries{ul}\selectfont}% used with mathpazo 

\pgfdeclareplotmark{fat-}
{%
    \pgfsetlinewidth{1}
    \pgfpathmoveto{\pgfqpoint{\pgfplotmarksize}{0pt}}%
    \pgfpathlineto{\pgfqpoint{-\pgfplotmarksize}{0pt}}%
    \pgfusepathqstroke
}%

\pgfplotsset{/pgfplots/error bars/error bar style={very thick,blue,mark size=2.5},/pgfplots/error bars/error mark={fat-}}
%\pgfplotsset{/pgfplots/label shift={0pt}}

\pgfplotsset{compat=1.15}
\pgfplotsset{label style={font=\Large},
            tick label style={font=\Large}}

\pgfplotsset{error bars/.cd,
    x dir=both, x explicit,
    y dir=both, y explicit,
}

\begin{document}

\begin{figure}    
    \centering
    \begin{tikzpicture}
        \begin{axis}[
            xmode=log,
            ymode=log,
            enable tick line clipping=false,
            width=9cm,
            height=7cm,
            axis line style=semithick,
            legend style={at={(0.95,0.3)},draw=none},
            legend cell align={right},
            x tick style={black,semithick},
            x label style= {at={(ticklabel cs:0.5)},anchor=near ticklabel},
            xlabel={$x$},
            xmin=1,xmax=1000,
            xtick={1,10,100,1000},
            xtick pos=bottom,
            minor x tick num=9,
            xtick align=outside,
            y tick style={black,semithick},
            y label style= {at={(ticklabel cs:0.5)},anchor=near ticklabel},
            ylabel={$y$},
            ymin=0.5,ymax=5,
            ytick={0.1,0.5,1,3,5,10},
            ytick pos=left,
            minor y tick num=9,
            ytick align=outside,
        ]        
        \pgfplotstableread{
            x      y
            2      0.8
            10     1
            50     3
        }{\mytable};
        \addplot [blue,mark=*,mark options={scale=1.5,blue}] 
             table [x=x,y=y] {\mytable};
        \addplot [red,mark=*,mark options={scale=1.5,red}] 
             table [x expr=10*\thisrow{x},y=y] {\mytable};

        \end{axis}
    \end{tikzpicture}
\end{figure}


\end{document}

답변2

허용된 답변에 대한 의견에 추가됩니다.

열 이름에 신경쓰고 싶지 않은 경우 \thisrowno{<idx>}변경되지 않는 데이터의 경우 and를 사용할 수 있습니다(첫 번째 곡선의 좌표는 모두 두 번째 곡선의 경우 y축만) x index.y index

\begin{tikzpicture}
\begin{axis}[...]

\pgfplotstableread{
    foo    bar
    2      0.8
    10     1
    50     3
}{\mytable};
\addplot [blue,mark=*,mark options={scale=1.5,blue}] 
     table [x index=0,y index=1] {\mytable};
\addplot [red,mark=*,mark options={scale=1.5,red}] 
     table [x expr=10*\thisrowno{0},y index=1] {\mytable};

\end{axis}
\end{tikzpicture}

foo그것들 이 있거나 bar없거나 전혀 동일한 결과를 제공합니다.

관련 정보