1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JuliaのPlotsでColorbarの目盛りを扱う(邪道)

Last updated at Posted at 2024-08-29

目的

これをこうしたい。

変更前 変更後
test_before.png test_after.png

どうやら、GRをバックエンドにした際には、こういったColorbarの目盛りの扱いがうまく機能していないようです(今後直ることを祈りましょう)。。。
そこで、今回は無理やりそれっぽくする方法を紹介します。

データ

サンプルデータは次のようにしました。

X = range(-2, 2, length=100)
Y = range(-2, 2, length=100)
Z = [exp(-(x^2+2y^2)/√2) for y in Y, x in X].*10000000

意図的に、とても大きな値となるようにしています。

通常の場合

heatmapを作成しようと試みると、次のようなコードになるかと思います。

heatmap_plot = heatmap(
  X,Y,Z,
  c=:bwr,
  size=(500, 400),
  cbar_title="COLORBAR_LABEL",
)

しかし、こうすると次のようにColorbarの目盛りの桁数によっていまいちな挙動になります。
test_before.png

邪道な解決法

そこで、今回は別にColorbarを人工的にheatmapでプロットし、それらを@layoutで並べて再現します。

  1. まず、Colorbarのないheatmapをheatmap_plotとして作成します。
    heatmap_plot = heatmap(
      X,Y,Z,
      colorbar=:none,
      c=:bwr,
    )
    
  2. 続いて、Colorbarをプロットするcbar(data)という関数を作成します。こちらはdataすなわちZ軸の値をもつデータを入力することで、実質的なColorbarを返してくれます。
    cbar(data,step=100) = begin
      cbar_data = range(minimum(data),maximum(data),step)
      cbar_fig = heatmap(
        [1],cbar_data,
        cbar_data .* ones(step, 1),
        c=:bwr,
        legend=:none,
        xticks=:none,
        yticks=:none,
        formatter=:scientific,
      )
      axes_fig = twinx(cbar_fig)
      plot!(axes_fig,
        [1],cbar_data,
        legend=:none,
        xticks=:none,
        ylabel="COLORBAR_LABEL",
      )
    end
    
  3. 最後に、これらを@layoutを用いて結合させます。
    plot(
      heatmap_plot,
      cbar(Z),
      layout=@layout([grid(1, 1) a{0.03w}]),
      size=(500, 400),
    )
    

すると次のような図が得られるはずです。
test_after.png

最後に

邪道な方法ですが、自由度はかなり高いので、いろいろといじりやすいと思います。早くGRでも:scientificなどが使えるようになるといいですね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?