1. ホーム
  2. r

[解決済み] ggplotの色指定がおかしい

2022-03-10 05:05:18

質問

ggplotで使用される様々な色をプロットするために、以下の関数を実装しました。これらの関数はまた、凡例に16進数の色の値をプロットします。しかし、どういうわけか、色と16進数の値の割り当てが間違っていて、その理由がわかりません。私は、データフレームに追加する前に16進数の色をソートしました。 data をggplot2関数で使用します。それで問題が解決すると思ったのですが、そうではありませんでした。私はまた、ベクトルを作成しました col 凡例として表示したい16進数とrgbの色の値が含まれていますが、これを動作させるのに苦労しています。

ggplot_colors <- function(n, size=8, alpha=1) {
    library(grDevices)
    hues = seq(15, 375, length=n+1)
    cols_hex <- sort(hcl(h=hues, l=65, c=100)[1:n])
    cols_rgb <- col2rgb(cols_hex)
    cols_rgb <- apply(cols_rgb, 2, function(x){paste(x, collapse=",")})
    cols <- paste(cols_hex, cols_rgb, sep="; ")
    data <- data.frame(x=1:length(cols), 
                       y=1:length(cols), 
                       cols_hex=cols_hex, 
                       cols_rgb=cols_rgb, 
                       cols=cols)
    ggplot(NULL) +
      geom_point(data=data, 
                 aes(x=x, y=y, colour=cols_hex), size=size, alpha=alpha)
}

ggplot_colors(15, 8, 1)

<イグ

RGB値(248, 118, 109)、Hex値F8766Dの赤色は、凡例ではHex値00B0F6が割り当てられています。

解決方法は?

引数に色名を指定したいので colour= を追加し、この引数の凡例も表示する必要があります。 scale_colour_identity() を関数の最後の行に追加してください。この目盛りによって、与えられた値が実際の色値として解釈されることが保証されます。引数の追加 breaks=cols_hex 関数内 scale() は、凡例の中で名前の順序を保証します。

ggplot(NULL) +     
geom_point(data=data, aes(x=x, y=y, colour=cols_hex), size=size, alpha=alpha) + 
        scale_colour_identity(guide="legend",breaks=cols_hex)

<イグ