matplotlibのcolormapを自分好みにする
散布図とか描くとき色分けしてプロットすると思うんですけど、ちょっとデフォルトのものから変更したかったので調べてみました。途中から飽きて雑にしか理解してないので話半分に読んでください。
ざっくり説明すると、以下のようにRGB各色について点を0から1の範囲で指定すると線形補間してくれて色が決まるそう。1列目が入力の対応位置、2列目と3列目が実際に取る値になります。y=f(x)とすると1列目がxで2,3列目がyに当たると考えれば。yが2つある理由は後述しますが、取りあえずは同じ値を設定しておけば困らないと思います。
cdict1 = {'red':((0.0,0.5,0.5), (0.25,0.0,0.0), (0.5,1.0,1.0), (0.75,0.0,0.0), (1.0,0.5,0.5)), 'green':((0.0,0.0,0.0), (1.0,0.0,0.0)), 'blue':((0.0,0.0,0.0), (1.0,0.0,0.0))}
この場合、緑と青は全域で0、赤の値が最小値から最大値にかけて以下のグラフのように変化します。
実際に散布図をプロットしたものが以下になります。
さて、2列目と3列目が分かれている理由ですが線形補間を行う際、補間したい点を挟むcdictで定義された2点をa,bとしてa[0]<b[0]とすると、a[2]とb[1]を用いて補間されます。説明下手なので自分でも何言ってるかさっぱりですが、以下のように点を指定すると、
cdict2 = {'red':((0.0,1.0,1.0), (0.5,0.0,1.0), (1.0,0.0,0.0)), 'green':((0.0,0.0,0.0), (1.0,0.0,0.0)), 'blue':((0.0,0.0,0.0), (1.0,0.0,0.0))}
赤色の値は下図のように補完されます。
散布図を描くとこんな感じ。
おわかりいただけただろうか。理解力を総動員していただきたい。
もともと欲しかったのはこんなcolormap。
cdict3 = {'red':((0.0,1.0,1.0), (0.5,0.25,0.25), (1.0,1.0,1.0)), 'green':((0.0,1.0,1.0), (0.5,0.5,0.5), (0.75,1.0,1.0), (1.0,0.25,0.25)), 'blue':((0.0,1.0,1.0), (0.5,0.75,0.75), (0.75,0.0,0.0), (1.0,0.0,0.0))}
気持ち雨量レーダーっぽいかと思います。そうでもないかとも思います。どんなグラフにすればこうなるか理解力が無くてわからなかったので以下のサイトを使いました。
Custom colormaps for Matlab and Matplotlib - Colormap.org
これそのまま使えばええやんとも思った。以下使用したコード。
Arch linuxにxmonadを導入した
今までWMにはawesomeを使っていたのだけれど、マルチディスプレイ周りの挙動が気に入らなかったのと、じわじわとHaskellを勉強している影響でxmonadに移行した。それで色々メモとして残しておきたかったので久しぶりに筆を執ることに。基本的にArch Wikiを読めばある程度までは動かせるはず。
通知
作業中でもすぐリプライやふぁぼに対応するためにmikutterからの通知を取りこぼすわけにはいかない。awesomeでは標準でnaughtyとかいうのが入っていて特に何をすることもなく使えた気がするのが、xmonadは別で通知サーバーを入れないとダメらしい。Arch Wikiに色々候補が上げられているので適当にそれっぽいものをインストール。
ちなみに色々試した結果、dunstで落ち着いた。
壁紙の設定
デフォルトではあまりに真っ暗な画面が襲いかかってくるので起動できているのかすら確認できない。実際最初は失敗したと勘違いして諦めそうになった。awesomeではテーマを適当にいじれば壁紙を変更できたのが、xmonadではnitrogenなど外部ツールを使って設定するらしい。これでこころぴょんぴょん出来るように。
システムトレイ(xfce4-panelで言う通知エリア)
これもawesomeだと何もする必要がなかったけれど、xmobarはテキストを表示する程度の能力しかない(多分)のでそんな器用なことはできない。うまい方法が見つからなかったのでとりあえずxfce4-panelを使って、透明度を100%にするとそれっぽくなったのでそのまま放置。
gtk3が叛逆を起こす
具体的に言うと、gtk3のアプリケーションだけ周りに異様な空間ができる。gtk3のテーマファイル自体を書き換えたら若干ましになった。/usr/share/themes/にテーマファイルがあるので、使用中のテーマファイルの.window-frameの項目を消し去ったら何とかなる、はず。
他にもあった気がするので思い出したら書き足す。