チャチャチャおもちゃの抹茶っちゃ

ゲームのこととかプログラミングのこととか。気が向いたら書く。ブログタイトルは友人が考えました。

【gnuplot】使い方備忘録

gnuplotって?

gnuplot(ニュープロット しばしばグニュープロットとも)は、2次元もしくは3次元のグラフを作成するためのアプリケーションソフトウェアである。インターネットにおいて無料で配布されているフリーウェアである。1986年に最初のバージョンが開発された。現在では、LinuxUNIXWindowsmacOSなどの多くのオペレーティングシステム (OS) に対応したバージョンが開発されている。(Wikipediaより)

昔からあるグラフ作成ソフト。大抵のOSで動くので重宝する。Excelとかと違ってフリーで、レポートなどに便利なepsファイル出力もできる。

gnuplotのインストール

Linux(自分のはUbuntu)なら

$ sudo apt install gnuplot

管理者パスワードは入力しよう。

Windowsなら gnuplot - Browse /gnuplot at SourceForge.netから最新版のディレクトリを開いて対応するWindows用のインストーラをダウンロード。
ダウンロードできたら実行してインストールしておしまい。特別難しいことはないはず。

MacはもってないのでわからないけれどLinuxと似た感じなのかな。

使い方

WindowsならコマンドプロンプトLinuxならターミナルなり端末なりを開いてgnuplotと入力して起動する。

基本となる描画

gnuplot > plot sin(x)
gnuplot > replot

式やプロットすることができる。replotはまんまの意味でプロットし直し。後述する設定とかをいろいろいじった後にreplotすることがある。

実はここで変数を使うこともできる。

gnuplot > a = 2
gnuplot > plot a*x

f:id:mattyan1053:20181115151124p:plain
とかもできちゃう。詳しくは近似式のところで。 とりあえず次から説明する設定を変えたらいろいろplotしてみることになる。

データをプロットすることもできる。

gnuplot > plot "test.dat"

などとすれば描画できる。データはどのようにするかというと

1 10 100
2 20 200
3 30 300
4 40 400
5 50 500

のようなデータの場合、x軸は1列目、y軸は2列目に合うように描画され、3列目以降は無視される。
f:id:mattyan1053:20181115151808p:plain
任意の列の値を使いたい場合は

gnuplot > plot "test.dat" using 1:3

などと使う列を指定してあげるとその列を採用してくれる。

描画のスタイルは点や線などいろいろある。覚えておくと便利なのはlinespointslinespointsimpulsesboxesあたりだろうか。

gnuplot > plot "test.dat" with linespoints

などとwithをつければ良い。
f:id:mattyan1053:20181115152234p:plain

ちなみに、データのファイル名が使われてしまうのが嫌な場合は、タイトル付をしたり何もつけなかったりすることができる。

gnuplot > plot "test.dat" using 1:2 title "length"

f:id:mattyan1053:20181115155936p:plain

色をつけたいときはRGB値で指定して

gnuplot > plot sin(x) linecolor rgb "#FF0000"

一つのグラフに複数プロットしたいときは「,」で区切って

gnuplot > plot sin(x), cos(x)

とすれば良い。

近似式

gnuplotは入力データと式にあわせて近似式を計算してくれる。行列とか使うやつ。

gnuplot > fit a*x+b "test.dat" via a,b

とすれば入力データの前の式が入力データに近くなるようにa,bの値を作ってくれる。あとはこれを

gnuplot > plot a*x+b

してあげれば近似式がプロットできるというわけだ。

各種設定

plotは正直誰でもできるみたいなとこあるけれど、混乱するのが軸とかの設定の方だったりplotのオプションだったり。基本的にはsetの後ろにいろいろ単語をくっつけていくものが多い。無効にするときはunsetをつける。

入出力

入力

入力するには、ターミナルからコマンドを直接入力するか、ファイルをロードする必要がある。コマンドを書いたファイルをロードするときはまずコマンドを登録したファイル「plot.gp」を用意しておいて

# コメントアウトはハッシュで始めればOK
set terminal postscript eps
plot sin(x)
set terminal x11

これをgnuplotでロードする

gnuplot > load "plot.gp"

とすれば良い。

逆に、入力したコマンドを保存しておくなら

gnuplot > save "plot.gp"

としておけばそれまでに入力したコマンドを保存することができる。

出力

基本的に起動直後はplotすると新しくウィンドウが起動し、そこにグラフが描画される。gnuplotでは、この出力先をウィンドウからset terminalをすることで画像に変えることで出力することができる。ファイル名の指定はset output 'filename'で行う

gnuplot > set terminal png
gnuplot > set output 'test.png'
gnuplot > plot sin(x)

とすることでPNG形式で保存することができる。
ベクター画像であるEPS形式で保存したいときは

gnuplot > set terminal postscript eps
gnuplot > set output 'test.eps'

とすればOK。set terminal postscript eps enhanced colorとしてあげればカラーにもできる。また、set terminal postscript eps 28などと後ろに数字をつけると文字サイズが指定できる。

また元のウィンドウで表示するように戻したいときは Windowsなら

gnuplot > set terminal windows

Linuxなら

gnuplot > set terminal x11

としてやれば戻すことができる。

軸の設定

軸ラベル

まず知っておくと良い知識として、(基本的に)軸はx1,y1,x2,y2の4本(二次元の場合)ある。それぞれにラベルなどが設定できる。位置はこんな感じ。
f:id:mattyan1053:20181115153250p:plain

軸のスケール

デフォルトでは自動的にちょうどいい感じになるようにスケールが取られるが、任意に設定することもできる。

自動縮尺

gnuplot > set autoscale x
gnuplot > set autoscale y

手動縮尺

gnuplot > set xrange [0:20]
gnuplot > set yrange [0:40]
gnuplot > set x2range [-10:10]

と言った感じで各軸にスケールを設定できたりする。[a:b]のところは軸の値がaからbまでですよという意味。ちなみに現在どういう設定かはshow autoscaleで確認することができる。ちなみに対数スケールにするには

gnuplot > set logscale y

のような感じにすればOK。

軸ラベル

各軸のラベルは

gnuplot > set xlabel 'label 1'
gnuplot > set x2label 'label 2'
gnuplot > set ylabel 'label 3'

のようにして設定できる。

タイトル

グラフのタイトルをつけることもできる(とはいえTeXの機能などのほうでつけたほうが楽だと思うが・・・・・・)。

gnuplot > set title 'TITLE'

凡例

どのグラフが何を表しているかの説明。表示位置などを決めることができる。

gnuplot > set key inside
gnuplot > set key left top # 左上に表示

f:id:mattyan1053:20181115155607p:plain

内側に表示する場合はinsideに設定しておく。その後に位置を指定。上下左右と斜めの8方向指定できる。他に、座標で指定するほうほうもあるにはある。

gnuplot > set key at 5.0, 5.0

f:id:mattyan1053:20181115155622p:plain
外側に表示してみることもできる。下に表示する場合

gnuplot > set key bmargin
gnuplot > set key center

f:id:mattyan1053:20181115155632p:plain

その他

グラフにグリッド線をつけたいときは

gnuplot > set grid

終わりに

これだけあればだいたいの二次元グラフはかけそう。各種コマンドを組み合わせることになる。 基本的にはプロットのコマンドファイルを作っておいてロードするのがデータ更新したときなどやりやすい。サンプルを貼ってみる。

# gnuplot script file
# using grid
set grid

# key position
set key inside top left

# set label
set xlabel 'Phase'
set ylabel 'Amplitude'

# set axis
set xrange [0:6]
set yrange [0:60]

# set values
fit a*x "test.dat" via a

# output
set terminal png 20
set output 'test.png'
plot "test.dat" using 1:2 with points notitle, a*x with lines title "test"

# undo terminal setting
set terminal x11
$ gnuplot
gnuplot > load "test.gp"

f:id:mattyan1053:20181115161928p:plain
こんな感じのファイルを作っておくと良い。

【Ubuntu 18.04.1 LTS】ネット接続が不安定な問題を解消する

先日UbuntuをPCにインストールした

Ubuntuでソフトウェアをインストールするにも何するにもネット接続できないとはじまらない。はやくsudo apt installが使えないってことになってしまうので持っていた無線LAN子機でネット接続をしようと試みた。

普段Windowsで使っているI-O Dataの無線LAN子機(WN-AC433UA)はWindowsしか対応しておらず、Linuxで使おうとするとドライバをgithubからDLして自分でコンパイルしなければならないようなのだがそもそもgccmakeが使えずsudo apt install gccしろとか言われてしまう。いやそれが使えないんじゃ・・・・・・

ネットワークに接続する

普段使っているのが使えなかったけれども、更に古いもので持っていたものが指してみると認識されたのでこれを使ってみた。スリーアールの無線LAN

  • 3R-KCWLAN

結構古いやつぽい?いつのだかよく覚えてない。製品の説明のとこにはWindows対応としか書いてないが元がなんかあるらしく、Linuxに挿しても認識することができた。とりあえず自宅のLANに接続してみると、一応つながるらしい。

接続が不安定

一応接続はできるのだが、短いスパンで繋がったり切れたりを繰り返してしまい、まともにダウンロードやブラウジングができない。ぐぐってみると、IPv6周りに問題があるらしい。なのでこれをオフにする。

IPv6を無効にする

まずはWi-Fiの設定を開く。
f:id:mattyan1053:20181014225951p:plain
右上の電源とかのところに接続が不安定ながらも繋がってるやつが表示されてるとおもうのでそこからWiFi設定を開く。
次にネットワーク一覧から接続するネットワークのオプションを開く。工場の地図記号みたいなやつ。
f:id:mattyan1053:20181014230248p:plain
開けたら「IPv6」のタブを開いて「IPv6メソッド」のところを「無効(Disable)」にする。
f:id:mattyan1053:20181014230706p:plain
これで設定はOK。PCを再起動してもう一度接続してみる。これでネットワークが不安定な状況は改善されたと思う。

最後に

自分は最初ネットワークが不安定なことにしばらく気づいてなかったのでなかなか他の設定に気づくのに時間がかかってしまったが、これをしたあとはいろいろとうまく行った。Ubuntuインストールして無線LAN繋いでみたけどいまいち不安定という人はやってみるといいかもしれない。

【Ubuntu】データ用別HDDにLinuxをインストールする

この記事のきっかけ

Windows Linux デュアルブート」とか「Linux 別HDD」とかで検索すると、一つのHDDにWindowsLinuxをインストールしたり、2つのHDDに別のOSをインストールしたりするやり方は出てくるけど、メインのHDDとは別のHDDの一部にLinuxをインストールするやり方はうまく見つからなかったため。とはいえパーティション分割しているだけなのでそこまでやり方は変わらなかったりする。

注意

PCのソフトウェア根幹となるOSの部分をいじる作業なので何かあっても自己責任でやりましょう。バックアップや回復手段を用意しておくことを強く推奨します
バックアップのとり方とか回復ドライブの作り方はシンプルに「Windows バックアップ」とか「Windows 回復ドライブ」とか調べれば出てきます。

あとBIOSをいじったり、ブートローダがうんぬんとか出てくるのであまり良くわからない人はそちらも調べて勉強してからやるとよい。

やりたいこと

Windows10がすでにインストールされているSSDが接続されている状態で、別のHDDにLinuxをインストールしたい。けれども、すでに別のHDDには一部Windowsで仕様しているデータが入っているのでそれは残したい

Ubuntuのインストールまで

ブートデバイスを作る

とりあえずWindowsLinuxのインストールデータを作成するまでは通常通り。今回はUSBで行った。容量32GBのUSBで行ったけどそんなにいらないとおもう、16GBもあれば安心なきがする(よく調べてない)。これは調べればいくらでも出てくるので略記だけ。簡単にやること羅列すると

  • UbuntuのISOをダウンロードしてくる(公式ならここから)
  • USBをフォーマットする(空にする、エクスプローラのUSBデバイスのとこ右クリックで出てくる)
  • 適当なソフトウェア(ぼくはUNetBbootinを使った)でUSBにブートデバイスを作成

UNetbootinの画面はこんな感じ↓ f:id:mattyan1053:20181013135726p:plain
ドライブ選択間違えないように。

Linuxをインストールするドライブのパーティションを分割

今のままでは、Linuxをインストールするための領域が作られていない。そのために、元あるHDDの領域を仕切って分割しておくことで、Linuxをインストールするスペースを作る。
イメージとしては、もともとなにもしていないときは
f:id:mattyan1053:20181013141452j:plain
こんな感じでSSD/HDDを使っていたのを
f:id:mattyan1053:20181013141515j:plain
こんな感じに分割したい。
ちなみに、この操作を行う前に、分割するディスクのデフラグ1を行っておくことをおすすめする。 やり方は結構簡単で、スタートメニューのところで右クリックして「ディスクの管理(K)」を開き、分割したいディスクの名前のところで右クリック、ボリュームの縮小を選択する。
f:id:mattyan1053:20181013141855p:plain
そのあと表示された画面で、確保したい領域(単位:MB)を設定する。今回は200GB取るように設定した。
一応Ubuntu公式HPを見ると25GBはほしいらしい?英語でどっかに書いてあった気がする。

f:id:mattyan1053:20181013142425p:plain
これでWindowsのほうでやるのは終わり。Linuxをインストールする準備が整った。

USBからLinuxを起動する

PCを起動すると、PCはHDDへアクセスしてOSを読み込み、OSが起動するという流れの操作を行う。ここで、普段はWindowsを起動するところを、先程作成したUSBから起動するようにしたい。そのためにBIOSの操作を行う。PC自作とかしたことある人ならわかるだろうアレ。BIOSの起動や設定は画面がマシンによって違うので一概に言うことはできないが、起動した直後のロゴとか出てるときにF12とかF2(ぼくのPCはこれ)、DELキーなどSystem setupに移行するコマンドがあるはずなので入力。「BOOT Device」を自分のUSBメモリに設定する。変更できたら続行。先程USBに作成したブートローダからLinuxが起動する。ちなみにここからスクショはないので許してほしい(とってなかった)。

LinuxをHDDにインストール

ここで有線LANとかネットワークに接続できる人は接続しておくと良い。セットアップのときに使える。起動したらDesktopにある「Install Ubuntu xx.xx LTS」(xx.xxはバージョン)をダブルクリックしてインストーラを起動する。
その後好きな言語を選択(まあここを読んでいる人はEnglishか日本語を選ぶことになるだろう)。「続ける」を押して進めていく。一緒にインストールするソフトウェアとかは任意で選択。しばらく進めていくと「このコンピューターにはWindows 10がインストールされています。どうしますか?」のような表示がされると思う。そうしたらここで必ず一番下の方にある「それ以外」を選択する。ここを間違えるともともとあるWindowsに上書きしてしまったり、別のHDDをフォーマットしてしまったり、いろいろ大変なことになりかねないので慎重に!
すると、Windowsをいれているドライブ(おそらくdev/sda)や追加でつないでいるデータ用ドライブ(dev/sdbとか)が出てくると思う。更に先ほど分割した200GBぶんの領域が「空き領域」とされているはずだ。今回はこの空き領域を更に分割し、ここにLinuxをインストールしていく。
ここで間違い回避のために「dev/sda」とか「dev/sda1」について軽く触れておくと、Windowsではドライブを「C:」とか「D;」とかつけて順番付けしていたのに対し、Linuxでは「dev/sda」「dev/sdb」・・・・・・というように順番付けしている。更に、一つのドライブをパーティション分割していると、1つ目、2つ目、・・・・・・というようにして「dev/sda1」「dev/sda2」、・・・・・・というように名前付けられていく。
以上を踏まえて、今回はWindowsが入ってない方のドライブ(dev/sdb)の空き領域(dev/sdb2)となっている部分にLinux用の領域を割り当てていく。
まずはWindowsない方のドライブの「空き領域」を選択し、左下の「+」をクリック。まずはメインのパーティションとして

パーティションを定義する。サイズはあとでもう一つスワップ領域2ってのをつくる(だいたい物理メモリの二倍くらいらしい?最適値はなんかいろいろあってわからない・・・・・・)のでそれを除いた値。利用方法はLinuxパーティションのフォーマットがext4なのでそれを選択(Windowsのフォーマットはntfsなので、先程Windowsで分割したデータ用の領域はこれで表示されてると思う)。rootは全部ここに作る。
残りのスワップ領域は

として定義する。これでパーティションの定義はOK。

ブートローダをインストールするデバイス」のところはUbuntuをインストールするディスクを選択。ここで注意したいのがUbuntuを「dev/sdb1」にインストールしたりするときでも「dev/sdb」を選択すること。パーティション分割した先ではなくディスクそのものを選択する。ちなみに、ここで横にハードディスクの名前が出るので、HDD2つを違う会社のものにしておくと間違えず見分けることができる(ex.「ATA TOSHIBA....」とか出る)。

これでインストールすればOK。

起動してみる

これですべての作業は完了した。起動してみるとgrubというのでOS選択画面が出たあと、選択してEnterキーを押すか、10秒経つと自動でUbuntuが起動するはずである。

おつかれさまでした!


  1. デフラグとは、断片化した記憶を整理して配置し直す操作のことである。HDDに保存されている記憶は、常に前に詰めて保存されているとは限らず、飛び飛びに記憶されていたりするので、そのままパーティション分割しようとすると分割できる領域が狭くなってしまうし、なによりバラバラ度の高いまま分割するのは多少なりとも危険なのでやっておくべき。Windowsではデフォルトでデフラグ機能がついていて、「Windows HDD デフラグ」とかで検索すると出てくる。

  2. スワップ領域は、仮想メモリとしてデータをHDD上に退避させておく場所のような感じ。詳しく知りたい人はググろう。