gnuplot で陰関数の表示(Ruby)
Python の matplotlib の plot_implicit による陰関数の描画がどうも信用ならないので、gnuplot でやってみることを考えた。しかし gnuplot 自体には陰関数を直接描画する機能はないので、工夫が必要となる。
gnuplot で陰関数を描く
基本的には上サイトでやっているように、3次元描画をして高さ 0 の等高線を描くという手段をとる。こんな感じになる。
描画した関数はひとつ前の記事と同じである。
Ruby コードは以下。なお、Gem は 'gnuplot' ではなく 'numo/gnuplot'を使った。この Gem の利用例はここに詳しい。
require 'bundler/setup' require 'numo/gnuplot' Numo.gnuplot do set "contour" #等高線の描画を指定 set "cntrparam levels discrete 0" #指定された高さの点に等高線を引く set style: "line 1 lw 2" set style: "increment user" set isosamples: [100, 100] #面描画に使用する線の数を設定する(3次元) unset "surface" #網を表示しない unset "ztics" #z軸の目盛の数値を表示しない set border: 15 #枠の設定(15は上下左右に枠を描く) set view: [0, 0] #視点の設定(0,0はz軸方向から見る) set "zeroaxis" #すべての軸の座標軸を表示する unset "key" #関数名を書かない set xrange: -1.1..1.1 set yrange: -1..1.6 splot "x ** 6 + 3 * x ** 4 * y ** 2 + 6 * x ** 4 * y - 2 * x ** 4 + 3 * x ** 2 * y ** 4" + "- 2 * x ** 2 * y ** 3 - 6 * x ** 2 * y ** 2 - 6 * x ** 2 * y + 3 * x ** 2 + y ** 6" + "- 3 * y ** 4 + 3 * y ** 2 - 1" end gets
どうも等高線の色を指定するのがうまくいかない。バグだろうか?
3次元で描いてみるとこんな感じ。