TikZ グラフのプロット(datavisualization)上で関数グラフをプロットしたい

TikZ グラフのプロット(datavisualization)上で関数グラフをプロットしたい

- 溝口 洸熙 の投稿
返信数: 4

目標

 現在,とある実験データに対して,そのデータをグラフ上にプロットしています.(添付図1)さらに,その実験データをもとに多項近似式を求めています.その近似式は以下です. $$y=7\cdot10^{-10} x^2 + 2\cdot 10^{-5}x - 0.00236$$ また,プロットするためのコードは以下の通りです.(実験データは exdata.csv に格納してあります.)

\begin{tikzpicture}[scale=0.9]
        \datavisualization[ % コマンドで描画情報を記述
            scientific axes, % 軸設定
            visualize as line/.list={mydata}, % 曲線で結ぶ
            mydata={style={thick,mark=*},smooth line,label in legend={text=実験結果}},
            legend={north west inside},
            x axis={label={データ個数(個)},length=10cm},
            y axis={label={秒数(秒)},ticks={step=0.5},length=7cm},
        ]
        data[set=mydata,headline={x, y}, read from file=exdata.csv];
\end{tikzpicture}

現状

 このページを参考にして,グラフをプロットしているのですが,このグラフの上に何かを書きたい場合,info{}を用いると良いと書いてありました.ただ,infoを用いて以下のように記すとエラーが出力されます.(おそらく,axisを利用している以上,一般の座標は使えないのだと悟っています.)


略
data[set=mydata,headline={x, y}, read from file=exdata.csv];
        info{
            \draw[domain=0:100000] plot(\x, {7 * pow(10,-10) * (\x)^2 + 2 * pow(10,-5) * (\x) - 0.0236});
        }
略

[{ (Error)
    "resource": " *secret* ",
    "owner": "LaTeX",
    "severity": 8,
    "message": "Dimension too large.\n \n\\relax ",
    "source": "LaTeX",
    "startLineNumber": 70,
    "startColumn": 17,
    "endLineNumber": 70,
    "endColumn": 39
}]

どなたか,目標達成方法をご存知の方,教えていただけないでしょうか?

添付 添付図1.png
タグ:
溝口 洸熙 への返信

Re: TikZ グラフのプロット(datavisualization)上で関数グラフをプロットしたい

- 和田 勇 の投稿
  • 以下のようなことをすると 105 個の plot データを作成するのだと思うの ですが、 TeX の扱う量の限界を超えてしまうのだと思います。

    \draw[domain=0:100000] plot(\x, {7 * pow(10,-10) * (\x)^2 + 2 * pow(10,-5) * (\x) - 0.0236});
    
  • の2015年8月6日を参 考にすると件の近似式をプロットするには以下のようにするようです。

    \documentclass{jlreq}
    \usepackage{pgfplots}
    %\pgfplotsset{compat=1.12}
    
    \begin{document}
    \begin{tikzpicture}[scale=0.9]
    \begin{axis}[axis lines=center]
        \addplot[domain=0:100000] plot(\x, {7 * pow(10,-10) * (\x)^2 + 2 * pow(10,-5) * (\x) - 0.0236});
    \end{axis}
    \end{tikzpicture}
    \end{document}
    
  • 上記のものを \begin{axis} … \end{axis} を info の中に組み込んであ げると、近似式でプロットしたものと実験データからのプロットしたものが 重ね合わされるようです

  • 二つの情報を一つに重ね合わせるためにいくつかのパラメータ調整が必要

    • 座標 (0,0) の調整
    • \begin{axis}… で表示される座標軸や目盛の表示抑制
    • \datavisualization などで図の大きさに関する微調整(試行錯誤が必要で面倒ですが)
  • 検証した LaTeX ソース

    \documentclass{jlreq}
    \usepackage{tikz}
    \usetikzlibrary {datavisualization.formats.functions}
    \usepackage{pgfplots}
    %\pgfplotsset{compat=1.12} % バージョン固定する場合などは
    %\pgfplotsset{compat=1.18} % pgfplot のバージョン固定する場合などは
    
    \begin{document}
    
    \section{件の近似式をx を 0 から 100,000 までプロット}
    \begin{tikzpicture}[scale=0.9]
        \begin{axis}[axis lines=center]
            \addplot[domain=0:100000] plot(\x, {7 * pow(10,-10) * (\x)^2 + 2 * pow(10,-5) * (\x) - 0.0236});
        \end{axis}
    \end{tikzpicture}
    
    \begin{tikzpicture}[scale=0.9]
        \datavisualization[ % コマンドで描画情報を記述
            scientific axes, % 軸設定
            visualize as line/.list={mydata}, % 曲線で結ぶ
            mydata={style={thick,mark=*},smooth line,label in legend={text=実験結果}},
            legend={north west inside},
            x axis={label={データ個数(個)},},
            y axis={label={秒数(秒)},ticks={step=1.5},},
            x axis={label={データ個数(個)},length=10cm},
            y axis={label={秒数(秒)},ticks={step=1.5},length=7cm},
         ]
         %data[set=mydata,headline={x, y}, read from file=exdata.csv]; データがないので
       data[set=mydata] {
                 x, y
                 0, 0
             10000, 0.2
             20000, 0.6
             30000, 1.5
             40000, 2.0
             50000, 3.0
             60000, 3.5
             70000, 5.0
             80000, 6.0
             90000, 7.5
            100000, 9
        };
        info{
          \begin{axis}[
            axis lines=center, % 0,0 の調整
            axis x line=none, axis y line=none,% 軸情報や目盛の非表示化
            % axis x line=top, axis y line=right,
            width=11.6cm, height=8.6cm,% 値は、axis x line ... で上部、右側に表示させて試行錯誤
            ]
            \addplot[domain=0:100000] plot(\x, {7 * pow(10,-10) * (\x)^2 + 2 * pow(10,-5) * (\x) - 0.0236});
            %  \draw[domain=0:100000] plot(\x, {7 * pow(10,-10) * (\x)^2 + 2 * pow(10,-5) * (\x) - 0.0236});
          \end{axis}
        };
    \end{tikzpicture}
    
    \end{document}
    
和田 勇 への返信

Re: TikZ グラフのプロット(datavisualization)上で関数グラフをプロットしたい

- 溝口 洸熙 の投稿
わざわざ,実験までしていただき,ありがとうございます.
期待する出力を実現できました.
添付 スクリーンショット 2022-11-07 12.29.34.png
溝口 洸熙 への返信

Re: TikZ グラフのプロット(datavisualization)上で関数グラフをプロットしたい

- 和田 勇 の投稿
先に示した例は、溝口 洸熙 さんの示されたものをベースにしていたのですが、
info{\bigin{axis} ... \end{axis}} と info{...} で囲わなくても
\bigin{axis} ... \end{axis} でも良いようです。

ps 凡例にある近似式を尊重するなら「データ個数(n)」ではと素人ながらと思ってます。
和田 勇 への返信

Re: TikZ グラフのプロット(datavisualization)上で関数グラフをプロットしたい

- 溝口 洸熙 の投稿

ありがとうございます.
データ個数\(n\)に関して,それは私の誤植です.ご指摘ありがとうございます.