168

カテゴリ データセットをプロットしており、異なるカテゴリを表すために独特の色を使用したいと考えています。number が与えられた場合、 R で最も特徴的な色の数nを取得するにはどうすればよいですか? nありがとう。

4

10 に答える 10

146

RColorBrewerパッケージからすべての定性的なパレットに参加しました。定性的なパレットは、それぞれ X 個の最も特徴的な色を提供することになっています。もちろん、それらを混ぜると 1 つのパレットにも同じような色が加わりますが、それが私が得ることができる最高のもの (74 色) です。

library(RColorBrewer)
n <- 60
qual_col_pals = brewer.pal.info[brewer.pal.info$category == 'qual',]
col_vector = unlist(mapply(brewer.pal, qual_col_pals$maxcolors, rownames(qual_col_pals)))
pie(rep(1,n), col=sample(col_vector, n))

color_Brewer_qual_60

他の解決策は次のとおりです。グラフィカルデバイスからすべての R カラーを取得し、それらからサンプリングします。灰色の色合いが似すぎているため、グレーの色合いを削除しました。これにより、433色が得られます

color = grDevices::colors()[grep('gr(a|e)y', grDevices::colors(), invert = T)]

20色セット

pie(rep(1,n), col=sample(color, n))

200 色n = 200:

pie(rep(1,n), col=sample(color, n))

200色セット

于 2015-10-15T09:31:04.347 に答える
88

ここにいくつかのオプションがあります:

  1. 関数を見てくださいpalette

     palette(rainbow(6))     # six color rainbow
     (palette(gray(seq(0,.9,len = 25)))) #grey scale
    
  2. そしてcolorRampPalette機能:

     ##Move from blue to red in four colours
     colorRampPalette(c("blue", "red"))( 4) 
    
  3. RColorBrewerパッケージ(およびWebサイト)を見てください。発散する色が必要な場合は、サイトで発散を選択します。例えば、

     library(RColorBrewer)
     brewer.pal(7, "BrBG")
    
  4. 私が欲しい色相のウェブサイトはたくさんの素敵なパレットを提供します。ここでも、必要なパレットを選択するだけです。たとえば、サイトからRGBカラーを取得して、独自のパレットを作成できます。

     palette(c(rgb(170,93,152, maxColorValue=255),
         rgb(103,143,57, maxColorValue=255),
         rgb(196,95,46, maxColorValue=255),
         rgb(79,134,165, maxColorValue=255),
         rgb(205,71,103, maxColorValue=255),
         rgb(203,77,202, maxColorValue=255),
         rgb(115,113,206, maxColorValue=255)))
    
于 2013-03-07T22:06:18.947 に答える
54

randomcoloRパッケージを試すこともできます:

library(randomcoloR)
n <- 20
palette <- distinctColorPalette(n)

円グラフで視覚化すると、非常に明確な色のセットが選択されていることがわかります(ここの他の回答で示唆されているように):

pie(rep(1, n), col=palette)

ここに画像の説明を入力

50色の円グラフで表示:

n <- 50
palette <- distinctColorPalette(n)
pie(rep(1, n), col=palette)

ここに画像の説明を入力

于 2016-02-20T21:32:35.170 に答える
14

colorRampPaletteベースまたはRColorBrewerパッケージから使用できます。

を使用colorRampPaletteすると、次のように色を指定できます。

colorRampPalette(c("red", "green"))(5)
# [1] "#FF0000" "#BF3F00" "#7F7F00" "#3FBF00" "#00FF00"

または、16進コードを指定することもできます。

colorRampPalette(c("#3794bf", "#FFFFFF", "#df8640"))(5)
# [1] "#3794BF" "#9BC9DF" "#FFFFFF" "#EFC29F" "#DF8640"
# Note that the mid color is the mid value...

RColorBrewer既存のパレットの色を使用できます。

require(RColorBrewer)
brewer.pal(9, "Set1")
# [1] "#E41A1C" "#377EB8" "#4DAF4A" "#984EA3" "#FF7F00" "#FFFF33" "#A65628" "#F781BF"
# [9] "#999999"

RColorBrewer他の利用可能なパレットについてはパッケージを見てください。お役に立てれば。

于 2013-03-07T22:05:58.837 に答える
12

大きなカラー パレットには外部ソースを使用することをお勧めします。

http://tools.medialab.sciences-po.fr/iwanthue/

さまざまなパラメータに従って任意のサイズのパレットを構成するサービスがあり、

https://graphicdesign.stackexchange.com/questions/3682/where-can-i-find-a-large-palette-set-of-contrasting-colors-for-coloring-many-d/3815

グラフィック デザイナーの観点から一般的な問題について説明し、使用可能なパレットの例を多数示します。

RGB 値からパレットを構成するには、次のように値をベクトルにコピーするだけです。

colors37 = c("#466791","#60bf37","#953ada","#4fbe6c","#ce49d3","#a7b43d","#5a51dc","#d49f36","#552095","#507f2d","#db37aa","#84b67c","#a06fda","#df462a","#5b83db","#c76c2d","#4f49a3","#82702d","#dd6bbb","#334c22","#d83979","#55baad","#dc4555","#62aad3","#8c3025","#417d61","#862977","#bba672","#403367","#da8a6d","#a79cd4","#71482c","#c689d0","#6b2940","#d593a7","#895c8b","#bd5975")
于 2016-11-02T16:06:30.093 に答える
2

私の理解では、特徴的な色を検索することは、単位立方体から効率的に検索することに関連しています。ここで、立方体の 3 次元は、赤、緑、青の軸に沿った 3 つのベクトルです。これは単純化して円柱 (HSV アナロジー) で検索することができます。この場合、彩度 (S) と値 (V) を固定し、ランダムな色相値を見つけます。多くの場合に機能します。こちらを参照してください。

https://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/

Rでは、

get_distinct_hues <- function(ncolor,s=0.5,v=0.95,seed=40) {
  golden_ratio_conjugate <- 0.618033988749895
  set.seed(seed)
  h <- runif(1)
  H <- vector("numeric",ncolor)
  for(i in seq_len(ncolor)) {
    h <- (h + golden_ratio_conjugate) %% 1
    H[i] <- h
  }
  hsv(H,s=s,v=v)
}

別の方法は、R パッケージを「均一に」使用することです https://cran.r-project.org/web/packages/uniformly/index.html

この単純な関数は、独特の色を生成できます。

get_random_distinct_colors <- function(ncolor,seed = 100) {
  require(uniformly)
  set.seed(seed)
  rgb_mat <- runif_in_cube(n=ncolor,d=3,O=rep(0.5,3),r=0.5)
  rgb(r=rgb_mat[,1],g=rgb_mat[,2],b=rgb_mat[,3])
}

グリッド検索によって、もう少し複雑な機能を考えることができます。

get_random_grid_colors <- function(ncolor,seed = 100) {
  require(uniformly)
  set.seed(seed)
  ngrid <- ceiling(ncolor^(1/3))
  x <- seq(0,1,length=ngrid+1)[1:ngrid]
  dx <- (x[2] - x[1])/2
  x <- x + dx
  origins <- expand.grid(x,x,x)
  nbox <- nrow(origins) 
  RGB <- vector("numeric",nbox)
  for(i in seq_len(nbox)) {
    rgb <- runif_in_cube(n=1,d=3,O=as.numeric(origins[i,]),r=dx)
    RGB[i] <- rgb(rgb[1,1],rgb[1,2],rgb[1,3])
  }
  index <- sample(seq(1,nbox),ncolor)
  RGB[index]
} 

この機能を次の方法で確認します。

ncolor <- 20
barplot(rep(1,ncolor),col=get_distinct_hues(ncolor))          # approach 1
barplot(rep(1,ncolor),col=get_random_distinct_colors(ncolor)) # approach 2
barplot(rep(1,ncolor),col=get_random_grid_colors(ncolor))     # approach 3

ただし、人間が知覚できる色で明確なパレットを定義するのは簡単ではないことに注意してください。上記のアプローチのどれが多様なカラー セットを生成するかは、まだテストされていません。

于 2020-04-13T07:54:01.453 に答える