Histogram coloringについて説明する。
参考文献: Histogram coloring (Wikipedia)
- 反復回数(iter)の値に応じて着色する方法
- 反復回数の頻度に応じて色をマッピングする
まずは、前回説明した「エスケープタイム」アルゴリズムによるマンデルブロ集合を再掲します。
mandelbrot()
関数の中身は省略します。知りたい方は 前回の記事
を参照ください。
library(tidyverse)
m1 <- mandelbrot()
ggplot(m1) +
aes(x=Re(c), y=Im(c), fill=iter) +
geom_raster() +
scale_fill_gradientn(colors=rainbow(7), na.value='black') +
coord_fixed(ratio=1)
この図は色に偏りがあります。大部分は赤、オレンジ、黄色であり、緑色~紫色の部分は非常に少ない。これは図中の大部分がiter値10以下であることを意味しています。
反復回数(iter)についてヒストグラムを表示してみます。
m1 %>%
filter(!is.na(iter)) %>%
ggplot() +
aes(x=iter) +
geom_histogram()
確かに反復回数(iter)の大部分が10以下の値です。 できれば赤~紫までの色が均等に使われるようにしたいです。 これは Histogram coloring を使うとできます。
Histogram coloring の概要
- 反復回数(iter)の値毎に個数をカウントする
- 累積和を求める
- 値域を[1,0]にする
### Histogram coloring ###
h <- m1 %>%
filter(!is.na(iter)) %>% ## NAを除外する
count(iter) %>% ## iterの値毎に個数をカウント
mutate(n=cumsum(n)) %>% ## 累積和を求める
mutate(n=n/max(n)) ## 値域を[0,1]にする
ggplot(h) +
aes(x=iter, y=n) +
geom_line()
m2 <- m1 %>%
left_join(h, by='iter') %>%
mutate(n=if_else(is.na(iter), NA_real_, n))
ggplot(m2) +
aes(x=Re(c), y=Im(c), fill=n) +
geom_raster() +
scale_fill_gradientn(colors=rainbow(7), na.value='black') +
coord_fixed(ratio=1) +
labs(title='Histogram coloring')
Histogram coloring により、多くの色が使用されるようになりました。しかし、綺麗な虹色とは言えません。これは反復回数(iter)が整数値であるために生じる現象です。上の図の赤色部分はiter=1を示しており、水色部分はiter=2を示しています。綺麗な虹色にするにはiter=1とiter=2の間を補完するような作業が必要です。この作業は次回紹介します。
0 件のコメント:
コメントを投稿