本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:世界の鳥の羽色でつくるカラーパレット「birdcolors」パッケージ

コウテイペンギンの黒と白、コンゴウインコの赤と青など鳥の羽色は、自然が作り出したカラーパレットだと思います。そんな羽色をカラーパレットとして使えるようにしたのが本パッケージです。収録されているのは世界の鳥の54種で、カラーパレットは2色から9色で構成されています。色数が足りないときは色補間によって指定した色数まで増やすことが可能です。また、ggplot2パッケージのスケールコマンドとbase Rのcolオプションに対応しているので、手軽に利用することが可能です。配色に迷ったときに羽色の色彩の豊かさからアイディアを得ることができるかもしれません。

パッケージバージョンは1.0.1。Windows 11 x64 (build 26200)のR version 4.6.1で確認しています。

パッケージのインストール

下記コマンドを実行してください。

# パッケージのインストール
install.packages("birdcolors")
install.packages("ggplot2")
install.packages("scales")

# パッケージの読み込み
library("birdcolors")

# 作図例で使用するパッケージ
# カラーパレットをscales::show_colでプロット
library("ggplot2")
library("scales")
スポンサーリンク

コマンド例

詳細はコメント、パッケージのヘルプを確認してください。

鳥の羽色を色ベクトルとして取り出す:bird_colorsコマンド

本パッケージの中心となるコマンドです。鳥の英名を渡すと、カラーパレットとして16進カラーコードのベクトルを得ることができますggplot2に限らずbase Rのcoオプションなどで使えます。

オプション意味初期値
palette_name鳥の英名(空白・ハイフン・アポストロフィは自動的に_へ変換される)“Scarlet Macaw”
ncols先頭から取り出す色数(NAでパレットの全色)NA
reverse色の並び順を反転するかFALSE
expand_palette色補間で拡張したあとの色数を数値で指定(FALSEで拡張なし)FALSE
# 既定パレット(Scarlet Macawの7色)を取り出す
show_col(bird_colors())

# 5色のパレットを補間して12色まで拡張する
show_col(bird_colors("Scarlet Macaw", expand_palette = 15))

# Scarlet Macawの先頭2色
#show_col(bird_colors("Scarlet Macaw", ncols = 2))

・既定パレット(Scarlet Macawの7色)を取り出す

・5色のパレットを補間して12色まで拡張する

base Rの棒グラフにそのまま渡してみます。架空の都市緑地における野鳥調査データを作成して使用します。

# 架空の調査地点別の記録種数データ
survey_df <- data.frame(site = c("北緑地", "中央公園", "河畔林",
                                 "丘陵地", "湿地公園"),
                        species = c(28, 34, 41, 22, 47))

# Lilac breasted Rollerの5色をそのまま棒の色に割り当てる
barplot(survey_df$species, names.arg = survey_df$site,
        col = bird_colors("Lilac breasted Roller"),
        border = NA, ylab = "記録種数", main = "調査地点別の記録種数")

収録パレットの一覧を取得:bird_menuコマンド

収録されている全パレットを、鳥名・色数・推奨タイプの3列のデータフレームで返します。推奨タイプ列にはContinuous(連続値向け)、Discrete(離散値向け)、Divergent(発散向け)のいずれかが入り、該当しないパレットは空欄になります。どのパレットを選べばよいか迷ったとき参考になります。

オプション意味初期値
all_or_rec全パレットは”all”、推奨パレットのみは”rec”を指定“all”
# 全パレットの一覧を取得
bird_all <- bird_menu()

# 先頭12件を確認
# head(bird_all, 12)

# 収録パレットの総数を確認
# nrow(bird_all)

・パレットの一覧

鳥名(カラーパレット名)色数推奨タイプ
Scarlet_Tanager2
Indigo_Bunting2
Pine_Warbler2
Varied_Thrush2
Cassin_s_Finch2Continuous
Barn_Swallow2
Northern_Cardinal2
Eastern_Screech_Owl2
Adelie_Penguin2
Emperor_Penguin2
Lazuli_Bunting3
Allen_s_Hummingbird3
Thick_billed_Euphonia3
Yellow_headed_Amazon3
Costa_s_Hummingbird3Divergent
Andean_Cock_of_the_Rock3
Lovely_Sunbird3Divergent
Curl_crested_Jay3
Northern_Shoveler3
Blue_footed_Booby3
Tufted_Titmouse3
Eastern_Bluebird3
Belted_Kingfisher4
Gray_crowned_Rosy_finch4
Elegant_Euphonia4
Black_spotted_Bare_eye4
Painted_Bunting4
Malayan_Crested_Fireback4
Sparkling_Violetear4
Roseate_Spoonbill4
Yellow_bellied_Sapsucker4
Blue_Jay4
King_Penguin4
Paradise_Tanager5
Hairy_crested_Antbird5
Keel_billed_Toucan5
Lilac_breasted_Roller5Discrete
Lesser_Yellow_headed_Vulture5
Tricolored_Heron5
Northern_Parula5
Variable_Sunbird5
Ultramarine_Lorikeet5Continuous
Hildebrandt_s_Starling5Continuous
Bluethroat5Divergent
Agami_Heron5
Ruby_throated_Hummingbird5
European_Goldfinch6Discrete
Black_backed_Dwarf_Kingfisher6
Blue_Pitta6
Brown_Pelican6
Scarlet_Macaw7Discrete
Eastern_Cattle_Egret7
Scaly_Ground_Roller8
Wood_Duck9

“rec”を指定すると、推奨タイプが付いた9パレットが用途別に並べ替えられて表示されます。

# 推奨パレットのみを取得
bird_menu("rec")

実行結果:

               bird_names ncols recommended
5          Cassin_s_Finch     2  Continuous
42   Ultramarine_Lorikeet     5  Continuous
43 Hildebrandt_s_Starling     5  Continuous
37  Lilac_breasted_Roller     5    Discrete
47     European_Goldfinch     6    Discrete
51          Scarlet_Macaw     7    Discrete
15    Costa_s_Hummingbird     3   Divergent
17         Lovely_Sunbird     3   Divergent
44             Bluethroat     5   Divergent

この結果から、全パレットを8色に拡張したカラーパレットを作っておくと、プロット作成時に便利だと思います。

# 推奨パレットの鳥名を取り出す
rec_names <- bird_menu("rec")$bird_names

# 各パレットを8色に拡張してリスト化
rec_pals <- lapply(rec_names, 
                   function(x) bird_colors(x, expand_palette = 8))

# リストの要素に鳥名を付与
names(rec_pals) <- rec_names

# 先頭2件を確認
lapply(rec_pals[1:2], function(x) show_col(x))

・Cassin_s_Finch

・Ultramarine_Lorikeet

全パレットを一覧画像で見比べる:bird_palette_visualizerコマンド

収録パレットを色帯のタイル画像として一覧描画します。”all”では8行4列のレイアウトでプロットされます。なお、”rec”を指定すると推奨9パレットが3行3列でプロットされ、連続値・発散向けのものは15色に補間された状態で示されます。

オプション意味初期値
all_or_rec全パレットは”all”、推奨パレットのみは”rec”を指定“all”
pdf_plotPDFに出力するか(FALSEで作図デバイスへ直接描画)FALSE
pathpdf_plotがTRUEのときのPDF保存先ディレクトリ(指定必須)なし
# 推奨パレットのみを大きめのタイルで一覧表示
bird_palette_visualizer("rec")

# 全パレットの一覧を一時ディレクトリにPDF保存
bird_palette_visualizer("all", pdf_plot = TRUE, path = tempdir())

# 生成されたPDFファイルを確認
browseURL(file.path(tempdir(), list.files(tempdir(), pattern = "pdf")))

・推奨パレットのみを大きめのタイルで一覧表示

鳥名の一部からパレットを探す:bird_searchコマンド

鳥の英名の一部を渡すと、部分一致する収録パレット名を返します。大文字と小文字は区別されません。該当がない場合は”No matches found”となります。

オプション意味初期値
sp_name探したい鳥の英名(部分一致・大文字小文字は区別しない)“Penguin”
# Penguinを検索
bird_search("Penguin")
[1] "Available birds: Adelie_Penguin, Emperor_Penguin, King_Penguin"

# Tanagerを検索
bird_search("Tanager")
[1] "Available birds: Scarlet_Tanager, Paradise_Tanager"

# 収録されていない鳥を検索
bird_search("Sparrow")
[1] "No matches found"

パレット提供者の貢献数を表示:leaderboardコマンド

パレットを提供した人物と、その提供数を表示します。オプションはありません。

# パレット提供者の一覧を取得
leaderboard()

実行結果:

            people contributions
1      Ben Tonelli            28
2    Ellie Magaldi             7
3 Casey Youngflesh             7
4     Chris Sayers             5

ggplot2の点・線の色に適用:scale_color_birdコマンド

bird_colorsコマンドで取り出した色ベクトルを、ggplot2の連続値用カラースケールに変換します。midpointを指定しない場合は色ベクトルを300段階に補間しているため、2色や5色のパレットでもなめらかなグラデーションが表示されます。

オプション意味初期値
bird_colsbird_colorsコマンドで取り出した色ベクトルなし
midpoint発散配色の中央となる値(3色パレットのときのみ有効)NA
name凡例のラベルggplot2::waiver()
lim色階調に対応させる値の範囲NULL
na.value範囲外および欠測値に割り当てる色“grey50”
guide凡例の種類(ggplot2::scale_fill_gradientを参照)“colourbar”
### データ例を作成#####
plot_df <- data.frame(canopy = round(runif(120, 5, 95), 1),
                      elevation = round(runif(120, 10, 780)))

# 樹冠被覆率への記録種数を付与
plot_df$species <- round(6 + plot_df$canopy * 0.28 + rnorm(120, 0, 3))
########

# 標高を色で表した散布図を作成
ggplot(plot_df, aes(x = canopy, y = species, color = elevation)) +
  geom_point(size = 3, alpha = 0.9) +
  # 連続値向けに推奨されたUltramarine Lorikeet
  scale_color_bird(bird_colors("Ultramarine Lorikeet"), name = "標高(m)") +
  labs(x = "樹冠被覆率(%)", y = "記録種数") +
  theme_minimal()

ggplot2の塗色に適用:scale_fill_birdコマンド

scale_color_birdの塗色版です。3色パレットはmidpointオプションを指定でき、指定した値を中央色として左右に色を分けた配色になります。増減や平年差のように0を境に意味が変わるデータと相性の良いと思います。

オプション意味初期値
bird_colsbird_colorsコマンドで取り出した色ベクトルなし
midpoint発散配色の中央となる値(3色パレットのときのみ有効)NA
name凡例のラベルggplot2::waiver()
lim色階調に対応させる値の範囲NULL
na.value範囲外および欠測値に割り当てる色“grey50”
guide凡例の種類(ggplot2::scale_fill_gradientを参照)“colourbar”
### データ例を作成#####
# 乱数の種を固定
set.seed(2026)

# 架空の調査地点×調査月の組み合わせを作成
tile_df <- expand.grid(month = 1:12,
                       site = c("北緑地", "中央公園", "河畔林",
                                "丘陵地", "湿地公園", "海岸林"))

# 個体数の平年差を付与
tile_df$diff <- round(rnorm(nrow(tile_df), 0, 4), 1)
########

# 平年差をタイルの塗りつぶし色で表現
ggplot(tile_df, aes(x = factor(month), y = site, fill = diff)) +
  geom_tile(color = "white", linewidth = 0.6) +
  
  # 3色パレットにmidpointを与えて0を中心としたカラーパレットにする
  scale_fill_bird(bird_colors("Lovely Sunbird"), midpoint = 0,
                  name = "平年差(個体)") +
  labs(x = "調査月", y = NULL) +
  theme_minimal()


この記事が誰かの役に立ちますように。

スポンサーリンク
価格および配送状況は変更される場合があります。購入時は商品ページをご確認ください。
当サイトに表示されている商品情報はAmazonから提供されたものであり、更新または削除される場合があります。
karada-goodはAmazonアソシエイトとして、適格販売により収入を得ています。