tag:crieit.net,2005:https://crieit.net/tags/%E6%95%A3%E5%B8%83%E5%9B%B3/feed 「散布図」の記事 - Crieit Crieitでタグ「散布図」に投稿された最近の記事 2023-02-23T15:03:54+09:00 https://crieit.net/tags/%E6%95%A3%E5%B8%83%E5%9B%B3/feed tag:crieit.net,2005:PublicArticle/18391 2023-02-23T15:03:54+09:00 2023-02-23T15:03:54+09:00 https://crieit.net/posts/ruby-numo-gnuplot-gem-scatterplot Ruby + Numo::Gnuplot(numo-gnuplot gem)で散布図を描く <p>@obelisk68 さんに教えてもらったサンプル(<a target="_blank" rel="nofollow noopener" href="https://qiita.com/sonota88/items/50609275668fcd7511e4#comment-0890d29e9583e74eba70">ruby_gnuplot の記事のコメント</a>, <a target="_blank" rel="nofollow noopener" href="https://obelisk.hatenablog.com/entry/2022/05/29/181912">ブログ</a>)で十分という気もしたのですが、一応自分でも触ってみました。</p> <p><a target="_blank" rel="nofollow noopener" href="https://rubygems.org/gems/numo-gnuplot">https://rubygems.org/gems/numo-gnuplot</a></p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/ruby-numo/numo-gnuplot">https://github.com/ruby-numo/numo-gnuplot</a></p> <h1 id="準備"><a href="#%E6%BA%96%E5%82%99">準備</a></h1> <ul> <li>gnuplot コマンドをインストール <ul> <li>Ubuntu 18.04 の場合は <code>sudo apt install gnuplot</code></li> </ul></li> <li>Numo::Gnuplot をインストール <ul> <li><code>gem install numo-gnuplot</code></li> </ul></li> </ul> <p>これだけ。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/ruby-numo/numo-narray">Numo::NArray</a> は必須ではありません(インストールも不要)。以下は Numo::NArray なしで試しています。</p> <h1 id="最低限の例"><a href="#%E6%9C%80%E4%BD%8E%E9%99%90%E3%81%AE%E4%BE%8B">最低限の例</a></h1> <p>PNG ファイルに出力する最低限の例です。</p> <pre><code class="ruby"># sample.rb require "numo/gnuplot" xs = [1, 2, 3, 4, 5] ys = [11, 22, 33, 44, 55] Numo.gnuplot do set terminal: "png" set output: "output.png" plot xs, ys end </code></pre> <pre><code class="sh"> # 実行 ... output.png が生成される ruby sample.rb </code></pre> <p><a href="https://crieit.now.sh/upload_images/1d02f3831d34666675afe13cd9b51f8763f7011c631ae.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1d02f3831d34666675afe13cd9b51f8763f7011c631ae.png?mw=700" alt="image" /></a></p> <p>簡単ですね。<br /> ちょっと見えにくいですが、 両端の点は枠線に重なっています。</p> <h1 id="環境"><a href="#%E7%92%B0%E5%A2%83">環境</a></h1> <pre><code class="sh">Ubuntu Linux 18.04 gnuplot -V #=> gnuplot 5.2 patchlevel 2 ruby -v #=> ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux] gem: numo-gnuplot 0.2.4 </code></pre> <h1 id="メモ"><a href="#%E3%83%A1%E3%83%A2">メモ</a></h1> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/rdp/ruby_gnuplot">ruby_gnuplot</a> と同様、インストールが楽なのが良い。gnuplot コマンドのインストールさえ済んでしまえば、他にインストール絡みでトラブルが起きる余地がなさそう。気分的に楽。</li> <li><code>numo/gnuplot.rb</code> ( https://github.com/ruby-numo/numo-gnuplot/blob/master/lib/numo/gnuplot.rb ) はコメントを除くと1,000行ちょいなので、サッと読める。ruby_gnuplot よりは大きめですが。 <ul> <li><code>Numo::Gnuplot#initialize</code> で <code>IO.popen</code> したプロセスにコマンドを送る方式</li> </ul></li> </ul> <hr /> <p>ruby_gnuplot との機能比較でいえば、以下のあたりが違うようです:</p> <ul> <li>Numo::NArray に対応している</li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/SciRuby/iruby">IRuby</a> に対応している</li> <li>irb で対話的に操作できる <ul> <li>gnuplot の対話型インターフェイスの代わりに使えるっぽい</li> </ul></li> </ul> <h1 id="自分が使いそうな機能についてメモ"><a href="#%E8%87%AA%E5%88%86%E3%81%8C%E4%BD%BF%E3%81%84%E3%81%9D%E3%81%86%E3%81%AA%E6%A9%9F%E8%83%BD%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%83%A1%E3%83%A2">自分が使いそうな機能についてメモ</a></h1> <ul> <li>グラフのタイトル指定</li> <li>複数の系列の描画</li> <li>数式のプロット</li> </ul> <p>などは <a target="_blank" rel="nofollow noopener" href="https://github.com/ruby-numo/numo-gnuplot">README</a> や <a target="_blank" rel="nofollow noopener" href="https://github.com/ruby-numo/numo-gnuplot/wiki/Introduction.ja">Introduction.ja · ruby-numo/numo-gnuplot Wiki</a> にサンプルがあるので、そっちを見てください。</p> <h2 id="軸タイトル"><a href="#%E8%BB%B8%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB">軸タイトル</a></h2> <pre><code class="ruby">Numo.gnuplot do set xlabel: "x軸のラベル" set ylabel: "y軸のラベル" # ... </code></pre> <h2 id="x軸, y軸の範囲指定"><a href="#x%E8%BB%B8%2C+y%E8%BB%B8%E3%81%AE%E7%AF%84%E5%9B%B2%E6%8C%87%E5%AE%9A">x軸, y軸の範囲指定</a></h2> <pre><code class="ruby">Numo.gnuplot do set xrange: 0..6 set yrange: 0..60 # ... </code></pre> <h2 id="凡例の系列名"><a href="#%E5%87%A1%E4%BE%8B%E3%81%AE%E7%B3%BB%E5%88%97%E5%90%8D">凡例の系列名</a></h2> <pre><code class="ruby">Numo.gnuplot do plot xs, ys, title: "series name" # ... </code></pre> <p><a href="https://crieit.now.sh/upload_images/b73ba4fbec5510c877d85d0cbf8d9c0063f7013aa98af.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b73ba4fbec5510c877d85d0cbf8d9c0063f7013aa98af.png?mw=700" alt="image" /></a></p> <h2 id="日本語フォント"><a href="#%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88">日本語フォント</a></h2> <p>無指定だと日本語が豆腐になりました。</p> <pre><code class="ruby">Numo.gnuplot do set terminal: "png font 'VL Gothic,20'" # ... </code></pre> <p><a href="https://crieit.now.sh/upload_images/6426107e494ed6aca64b9388221cdf2d63f7014778647.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6426107e494ed6aca64b9388221cdf2d63f7014778647.png?mw=700" alt="image" /></a></p> <h2 id="点の代わりにラベルを表示する"><a href="#%E7%82%B9%E3%81%AE%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%E3%83%A9%E3%83%99%E3%83%AB%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B">点の代わりにラベルを表示する</a></h2> <pre><code class="ruby">xs = [1, 2, 3, 4, 5] ys = [11, 22, 33, 44, 55] labels = ["A", "B", "C", "D", "E"] Numo.gnuplot do # ... plot xs, ys, labels, with: "labels" end </code></pre> <p><a href="https://crieit.now.sh/upload_images/06e4631861c41cafa09b2c4a22728f3f63f701524af8b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/06e4631861c41cafa09b2c4a22728f3f63f701524af8b.png?mw=700" alt="image" /></a></p> <h2 id="デバッグ出力"><a href="#%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E5%87%BA%E5%8A%9B">デバッグ出力</a></h2> <p><code>debug_on</code> を使うと、 gnuplot に送信しているコマンドを標準出力に出力することができます。</p> <pre><code class="ruby">xs = [1, 2, 3, 4, 5] ys = [11, 22, 33, 44, 55] Numo.gnuplot do debug_on set terminal: "png" set output: "output.png" plot xs, ys end </code></pre> <pre><code class="sh">$ ruby sample_debug.rb <set terminal png <set output "output.png" <plot '-' <1 11 <2 22 <3 33 <4 44 <5 55 <e </code></pre> <p>行頭の <code><</code> を取り除いてやれば、そのまま gnuplot に渡せるようです。</p> <pre><code class="sh">$ ruby sample_debug.rb | sed -e 's/^<//g' > sample.gs $ cat sample.gs set terminal png set output "output.png" plot '-' 1 11 2 22 3 33 4 44 5 55 e # スクリプトを gnuplot コマンドに渡して実行 $ gnuplot sample.gs </code></pre> <h1 id="まとめたもの"><a href="#%E3%81%BE%E3%81%A8%E3%82%81%E3%81%9F%E3%82%82%E3%81%AE">まとめたもの</a></h1> <p>せっかくなのでいろいろ含めたものも貼ってみます。<br /> @obelisk68 さんが書いてくださったのとほぼ同じ。</p> <pre><code class="ruby">require "numo/gnuplot" xs = [1.0, 1.8, 3.1] ys1 = [11, 25, 32] ys2 = [21, 35, 42] ys3 = [31, 45, 52] Numo.gnuplot do set terminal: "png font 'Noto Sans CJK JP,12'" set output: "output.png" set title: "グラフのタイトル" set xrange: 0..6 set yrange: 0..60 set xlabel: "x軸のラベル" set ylabel: "y軸のラベル" plot xs, ys1, { title: "系列1(点のみ)" }, xs, ys2, { title: "系列2(線のみ)", with: :lines }, xs, ys3, { title: "系列3(点と線)", with: :linespoints }, "x * 10", { title: "y = x * 10" } end </code></pre> <p><a href="https://crieit.now.sh/upload_images/0a564211e53eb0221887ee8da4ecd21163f7016136f2e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0a564211e53eb0221887ee8da4ecd21163f7016136f2e.png?mw=700" alt="image" /></a></p> <p><code>with: :lines</code> のように指定するか、または数式を使えば任意の直線が描画できるので、回帰直線もこれでいけますね(フィッティングの話については割愛)。</p> <h1 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h1> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/ruby-numo/numo-gnuplot-demo">ruby-numo/numo-gnuplot-demo: Ruby/Numo::Gnuplot Demo</a></p> <p>めちゃくちゃいっぱいある gnuplot 本家のサンプルを Numo::Gnuplot に書き直した版。README から辿れる情報ですが一応。</p> <h1 id="この記事を読んだ人は(ひょっとしたら)こちらも読んでいます"><a href="#%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A0%E4%BA%BA%E3%81%AF%EF%BC%88%E3%81%B2%E3%82%87%E3%81%A3%E3%81%A8%E3%81%97%E3%81%9F%E3%82%89%EF%BC%89%E3%81%93%E3%81%A1%E3%82%89%E3%82%82%E8%AA%AD%E3%82%93%E3%81%A7%E3%81%84%E3%81%BE%E3%81%99">この記事を読んだ人は(ひょっとしたら)こちらも読んでいます</a></h1> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/sonota88/items/50609275668fcd7511e4">Ruby + ruby_gnuplot(gnuplot gem)で散布図を描く</a></p> <p>ruby_gnuplot もシンプルで良いと思いますよ。</p> <hr /> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/sonota88/items/86afece3b2595648a656">SVG::Graph(svg-graph gem)で散布図を描く</a></p> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/sonota88/items/b586e96f7805a5695a34">Galaaz を触ってみた(TruffleRuby + ggplot2 で散布図を描いてみた)</a></p> sonota486 tag:crieit.net,2005:PublicArticle/18359 2022-12-29T18:12:03+09:00 2022-12-29T18:20:09+09:00 https://crieit.net/posts/ruby-gnuplot-gem-scatterplot Ruby + ruby_gnuplot(gnuplot gem)で散布図を描く <p><a target="_blank" rel="nofollow noopener" href="https://rubygems.org/gems/gnuplot">https://rubygems.org/gems/gnuplot</a></p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/rdp/ruby_gnuplot">https://github.com/rdp/ruby_gnuplot</a></p> <h1 id="準備"><a href="#%E6%BA%96%E5%82%99">準備</a></h1> <ul> <li>gnuplot コマンドをインストール <ul> <li>Ubuntu 18.04 の場合は <code>sudo apt install gnuplot</code></li> </ul></li> <li>ruby_gnuplot をインストール <ul> <li><code>gem install gnuplot</code></li> </ul></li> </ul> <p>これだけ。</p> <p>ただし、 Ruby 3.1.0 で matrix が bundled gem になったようなので、3.1.0 以降の場合は <code>gem install matrix</code> も必要です。<br /> 参考: <a target="_blank" rel="nofollow noopener" href="https://zenn.dev/shuichi/articles/bundled-gem-with-gemfile">[Ruby] Bundled gemsはGemfileに指定して使おう</a></p> <h1 id="最低限の例"><a href="#%E6%9C%80%E4%BD%8E%E9%99%90%E3%81%AE%E4%BE%8B">最低限の例</a></h1> <p>PNG ファイルに出力する最低限の例です。</p> <pre><code class="ruby"># sample.rb require "gnuplot" Gnuplot.open do |gp| Gnuplot::Plot.new(gp) do |plot| plot.terminal "png" plot.output "output.png" x = [1, 2, 3, 4, 5] y = [11, 22, 33, 44, 55] plot.data << Gnuplot::DataSet.new([x, y]) end end </code></pre> <pre><code class="sh"> # 実行 ... output.png が生成される ruby sample.rb </code></pre> <p><a href="https://crieit.now.sh/upload_images/36b6f940e2f434c979b5ada813c8206f63ad5a4b7d18e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/36b6f940e2f434c979b5ada813c8206f63ad5a4b7d18e.png?mw=700" alt="image" /></a></p> <p>以上。簡単ですね。<br /> ちょっと見えにくいですが、 両端の点は枠線に重なっています。</p> <p>PNG 以外にも、 SVG や PDF として出力することもできます。</p> <h1 id="環境"><a href="#%E7%92%B0%E5%A2%83">環境</a></h1> <pre><code class="sh">Ubuntu Linux 18.04 gnuplot -V #=> gnuplot 5.2 patchlevel 2 ruby -v #=> ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux] gem: gnuplot 2.6.2 matrix 0.4.2 </code></pre> <h1 id="メモ"><a href="#%E3%83%A1%E3%83%A2">メモ</a></h1> <ul> <li>とにかくインストールが楽なのが良い。gnuplot コマンドのインストールさえ済んでしまえば、他にインストール絡みでトラブルが起きる余地がなさそう。気分的に楽 👌</li> <li>gnuplot でできることは大体何でもできるはず。たぶん。</li> <li><code>gnuplot.rb</code> ( https://github.com/rdp/ruby_gnuplot/blob/master/lib/gnuplot.rb ) はコメントを除くと300行くらいなので、サッと読める <ul> <li>gnuplot 用のスクリプトに変換して gnuplot コマンドに渡しているだけ</li> </ul></li> <li>「○○がやりたいけどどうすればいい?」となった場合は gnuplot 向けの情報を探す <ul> <li>gnuplot は枯れたプロダクトなので、情報はたくさんある</li> <li>すでに gnuplot に習熟している人は楽そう</li> </ul></li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/red-data-tools/charty">Charty</a> のバックエンドとして使える?(まだ試していません) <ul> <li>(追記) 2022-05-29 現在では未対応でした</li> </ul></li> </ul> <p>非常に薄いラッパーなので、素の gnuplot をそのまま使うのと実はそんなに大差なくて、そこを踏まえた上で使う分には便利。<br /> 「gnuplot の使い方を覚えたいわけではないんだけどなあ……」という人には向かないかもしれません。</p> <h1 id="自分が使いそうな機能についてメモ"><a href="#%E8%87%AA%E5%88%86%E3%81%8C%E4%BD%BF%E3%81%84%E3%81%9D%E3%81%86%E3%81%AA%E6%A9%9F%E8%83%BD%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%83%A1%E3%83%A2">自分が使いそうな機能についてメモ</a></h1> <ul> <li>グラフのタイトル指定</li> <li>x軸, y軸の範囲指定、軸タイトル指定</li> <li>複数の系列の描画</li> <li>数式のプロット</li> </ul> <p>などは <a target="_blank" rel="nofollow noopener" href="https://github.com/rdp/ruby_gnuplot">README</a> にサンプルがあるので、そっちを見てください。</p> <h2 id="系列名の凡例"><a href="#%E7%B3%BB%E5%88%97%E5%90%8D%E3%81%AE%E5%87%A1%E4%BE%8B">系列名の凡例</a></h2> <p><code>DataSet.new</code> にブロックを付けると、ブロックパラメータとして DataSet のインスタンスが渡されるので、それを使って指定できる。</p> <pre><code class="ruby">plot.data << Gnuplot::DataSet.new([x, y]) { |ds| ds.title = "dataset" } </code></pre> <p><a href="https://crieit.now.sh/upload_images/7a727bbde73b2e30d4a57505e10347d263ad5aa0bf78c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7a727bbde73b2e30d4a57505e10347d263ad5aa0bf78c.png?mw=700" alt="image" /></a></p> <h2 id="日本語フォント"><a href="#%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88">日本語フォント</a></h2> <p>無指定だと日本語が豆腐になりました。<br /> <code>gnuplot フォント 日本語 set terminal</code> のような検索ワードで調べると、 <code>Plot#terminal</code> で指定できることが分かります。</p> <pre><code class="ruby">Gnuplot.open do |gp| Gnuplot::Plot.new(gp) do |plot| plot.terminal "png font 'VL Gothic,20'" plot.output "output.png" x = [1, 2, 3] y1 = [11, 25, 32] plot.data << Gnuplot::DataSet.new([x, y1]) { |ds| ds.title = "系列1" } end end </code></pre> <p><a href="https://crieit.now.sh/upload_images/34a1b30f9276e1831c27ee024469926b63ad5aaf0c674.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/34a1b30f9276e1831c27ee024469926b63ad5aaf0c674.png?mw=700" alt="image" /></a></p> <h2 id="点の代わりにラベルを表示する"><a href="#%E7%82%B9%E3%81%AE%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%E3%83%A9%E3%83%99%E3%83%AB%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B">点の代わりにラベルを表示する</a></h2> <pre><code class="ruby">Gnuplot.open do |gp| Gnuplot::Plot.new(gp) do |plot| plot.terminal "png" plot.output "output.png" x = [1, 2, 3] y = [11, 22, 33] label = ["A", "B", "C"] plot.data << Gnuplot::DataSet.new([x, y, label]) { |ds| ds.with = "labels" } end end </code></pre> <p><a href="https://crieit.now.sh/upload_images/0c359f4284f6db1f1eeab9708335763163ad5abc9417f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0c359f4284f6db1f1eeab9708335763163ad5abc9417f.png?mw=700" alt="image" /></a></p> <hr /> <p>点とラベルを両方表示するのは若干面倒そう。</p> <p>In gnuplot, how to label each point in the plot with its coordinates? - Stack Overflow<br /> <a target="_blank" rel="nofollow noopener" href="https://stackoverflow.com/questions/23177716/in-gnuplot-how-to-label-each-point-in-the-plot-with-its-coordinates">https://stackoverflow.com/questions/23177716/in-gnuplot-how-to-label-each-point-in-the-plot-with-its-coordinates</a></p> <h2 id="生成されたスクリプトだけ欲しい"><a href="#%E7%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%A0%E3%81%91%E6%AC%B2%E3%81%97%E3%81%84">生成されたスクリプトだけ欲しい</a></h2> <p>以下のように <code>Gnuplot.open</code> にモンキーパッチを当てると、グラフの描画は行わずに gnuplot 用に生成されたスクリプトの出力だけを行うことができます。</p> <pre><code class="ruby">module Gnuplot def self.open(persist = true) io = $stdout yield io end end Gnuplot.open do |gp| Gnuplot::Plot.new(gp) do |plot| x = [1, 2, 3] y = [11, 22, 33] plot.data << Gnuplot::DataSet.new([x, y]) end end </code></pre> <pre><code class="sh">$ ruby sample_print_script.rb > sample.gs $ cat sample.gs plot '-' 1 11 2 22 3 33 e # スクリプトを gnuplot コマンドに渡して実行 $ gnuplot -persist sample.gs </code></pre> <h1 id="まとめたもの"><a href="#%E3%81%BE%E3%81%A8%E3%82%81%E3%81%9F%E3%82%82%E3%81%AE">まとめたもの</a></h1> <p>せっかくなのでいろいろ含めたものも貼ってみます。</p> <pre><code class="ruby">require "gnuplot" Gnuplot.open do |gp| Gnuplot::Plot.new(gp) do |plot| plot.terminal "png font 'Noto Sans CJK JP,12'" plot.output "output.png" plot.title "グラフのタイトル" plot.xrange "[0:6]" plot.yrange "[0:60]" plot.xlabel "x軸のラベル" plot.ylabel "y軸のラベル" x = [1, 2, 3] y1 = [11, 25, 32] y2 = [21, 35, 42] y3 = [31, 45, 52] plot.data << Gnuplot::DataSet.new([x, y1]) { |ds| ds.title = "系列1" } plot.data << Gnuplot::DataSet.new([x, y2]) { |ds| ds.title = "系列2(線のみ)" ds.with = "lines" } plot.data << Gnuplot::DataSet.new([x, y3]) { |ds| ds.title = "系列3(点と線)" ds.with = "linespoints" } # 数式 plot.data << Gnuplot::DataSet.new("x * 10") { |ds| ds.title = "y = x * 10" } end end </code></pre> <p><a href="https://crieit.now.sh/upload_images/dda408a296d12511a205c05e56b2e0e563ad58ecdcfc6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/dda408a296d12511a205c05e56b2e0e563ad58ecdcfc6.png?mw=700" alt="image" /></a></p> <p><code>ds.with = "lines"</code> を使うか、または数式を使えば任意の直線が描画できるので、回帰直線もこれでいけますね(フィッティングの話については割愛)。</p> <h1 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h1> <p>Rubyのgnuplotで時系列データをプロット | Lifelog<br /> <a target="_blank" rel="nofollow noopener" href="https://ytkyk.info/blog/2016/07/21/rubyのgnuplotで時系列データをプロット/">https://ytkyk.info/blog/2016/07/21/rubyのgnuplotで時系列データをプロット/</a></p> <hr /> <p>gnuplot documentation<br /> <a target="_blank" rel="nofollow noopener" href="http://gnuplot.info/documentation.html">http://gnuplot.info/documentation.html</a></p> <p>日本語のPDFがあります。</p> <hr /> <p>Demos for gnuplot version 5.4<br /> <a target="_blank" rel="nofollow noopener" href="http://gnuplot.sourceforge.net/demo_5.4/">http://gnuplot.sourceforge.net/demo_5.4/</a></p> <p>豊富なサンプル。gnuplot マジ何でもできるな、という気持ちになります。</p> <h1 id="この記事を読んだ人は(ひょっとしたら)こちらも読んでいます"><a href="#%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A0%E4%BA%BA%E3%81%AF%EF%BC%88%E3%81%B2%E3%82%87%E3%81%A3%E3%81%A8%E3%81%97%E3%81%9F%E3%82%89%EF%BC%89%E3%81%93%E3%81%A1%E3%82%89%E3%82%82%E8%AA%AD%E3%82%93%E3%81%A7%E3%81%84%E3%81%BE%E3%81%99">この記事を読んだ人は(ひょっとしたら)こちらも読んでいます</a></h1> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/sonota88/items/86afece3b2595648a656">SVG::Graph(svg-graph gem)で散布図を描く</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/sonota88/items/b586e96f7805a5695a34">Galaaz を触ってみた(TruffleRuby + ggplot2 で散布図を描いてみた)</a></li> </ul> sonota486 tag:crieit.net,2005:PublicArticle/16620 2021-01-19T03:06:48+09:00 2021-01-19T03:06:48+09:00 https://crieit.net/posts/f00c3157c7e766549834c6aa17923099 散布図へ色を付ける方法 <pre><code class="python">import matplotlib.pyplot as plt from scipy.stats import gaussian_kde x=(np.array([np.arange(0, 2.11,0.03 )]*len(index))).flatten() y=GA[index,19:19+71].flatten() xy=np.vstack([x,y]) z=gaussian_kde(xy)(xy) plt.figure(figsize=(5, 3), dpi=100) plt.title('Pitch') plt.scatter(x,y,c=z,s=10) plt.grid(True) plt.ylim(0,0.1) plt.xlabel(" [rad/s]") plt.ylabel("[deg^2/s]") plt.show() </code></pre> <p><a href="https://crieit.now.sh/upload_images/74eb05fa85abc8cad6d1fab5078931006005ce34415d9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/74eb05fa85abc8cad6d1fab5078931006005ce34415d9.png?mw=700" alt="image" /></a></p> kawai_mizugorou