web-dev-qa-db-ja.com

色1から色2までのn色のグラデーション

私はよくグラデーションをニースにするggplot2を使用します( 例についてはここをクリック )。 baseで作業する必要があり、scalesを使用して色のグラデーションを作成することもできますが、どのように使用するかについては大したことはありません。基本的な目標は、x色からy色の範囲のn色のパレットを生成することです。ただし、ソリューションはベースで動作する必要があります。これは出発点でしたが、nを入力する場所がありません。

 scale_colour_gradientn(colours=c("red", "blue"))

私はよく知っています:

brewer.pal(8, "Spectral") 

RColorBrewerから。 ggplot2がグラデーションを処理する方法に似たアプローチをもっと探しています。これらの2つの色があり、途中で15色が必要です。どうやってやるの?

92
Tyler Rinker

colorRampPaletteはあなたの友達かもしれません:

colfunc <- colorRampPalette(c("black", "white"))
colfunc(10)
# [1] "#000000" "#1C1C1C" "#383838" "#555555" "#717171" "#8D8D8D" "#AAAAAA"
# [8] "#C6C6C6" "#E2E2E2" "#FFFFFF"

そして、それが機能することを示すために:

plot(rep(1,10),col=colfunc(10),pch=19,cex=3)

enter image description here

155
thelatemail

前の回答を拡張するだけで、colorRampPaletteは3色以上を処理できます。

したがって、より拡張された「ヒートマップ」タイプの外観については、次のことができます。

colfunc<-colorRampPalette(c("red","yellow","springgreen","royalblue"))
plot(rep(1,50),col=(colfunc(50)), pch=19,cex=2)

結果の画像:

enter image description here

48
jsol

以下を試してください:

color.gradient <- function(x, colors=c("red","yellow","green"), colsteps=100) {
  return( colorRampPalette(colors) (colsteps) [ findInterval(x, seq(min(x),max(x), length.out=colsteps)) ] )
}
x <- c((1:100)^2, (100:1)^2)
plot(x,col=color.gradient(x), pch=19,cex=2)

enter image description here

15
Daniel Hoop

上記の答えは有用ですが、グラフでは、黒のより暗いグラデーションを区別することは困難です。私が見つけた1つの選択肢は、次のようにグレー色のグラデーションを使用することです

palette(gray.colors(10, 0.9, 0.4))
plot(rep(1,10),col=1:10,pch=19,cex=3))

グレースケールの詳細 こちら

追加

上記のコードを青や黒などの異なる色に使用したとき、グラデーションはそれほど明確ではありませんでした。 heat.colors()の方が便利なようです。

このドキュメント には、より詳細な情報とオプションがあります。 pdf

7
Anusha