web-dev-qa-db-ja.com

Rの因子によるカラープロット

2つの変数の散布図を作成していますが、因子変数でポイントを色付けしたいと思います。再現可能なコードを次に示します。

data <- iris
plot(data$Sepal.Length, data$Sepal.Width, col=data$Species)

これはすべてうまくいきますが、どの要因がどの色に色付けされているかをどのように知ることができますか?

25
LoveMeow
data<-iris
plot(data$Sepal.Length, data$Sepal.Width, col=data$Species)
legend(7,4.3,unique(data$Species),col=1:length(data$Species),pch=1)

あなたのためにそれを行う必要があります。でも私は〜がいい ggplot2そして、Rでのより良いグラフィックのためにそれを提案するでしょう。

49
Maiasaura

paletteコマンドは、col = somefactor。また、色の設定にも使用できます。

palette()
[1] "black"   "red"     "green3"  "blue"    "cyan"    "Magenta" "yellow"  "gray"   

グラフでそれを確認するには、凡例を使用できます。

legend('topright', legend = levels(iris$Species), col = 1:3, cex = 0.8, pch = 1)

3色の新しい色のみを指定したことに気付くでしょう。これは係数を使用するように機能します。元々ポイントの色付けに使用されていた係数を使用することもできました。これにより、すべてが論理的に一緒に流れます...

また、色について特定することもできます。 ?rainbow初心者のために、そこから行きます。独自に指定することも、Rに実行させることもできます。それぞれに同じ方法を使用する限り、問題ありません。

37
John

マイアサウラのように、ggplot2。透明なリファレンスマニュアルが理由の1つです。ただし、これは簡単な方法の1つです。

require(ggplot2)
data(diamonds)
qplot(carat, price, data = diamonds, colour = color)
# example taken from Hadley's ggplot2 book

そして、有名な人が言ったように、プロット関連の投稿はプロットなしでは完全ではありません、結果は次のとおりです:

enter image description here

ここにいくつかの参照があります: qplot.R example 、これは基本的に私が使用する同じダイヤモンドデータセットを使用しますが、パフォーマンスを向上させるためにデータをトリミングします。

http://ggplot2.org/book/ マニュアル: http://docs.ggplot2.org/ current /

19
Matt Bannert

プロットポイントを係数で色付けし、対応する凡例を自動的に生成する方法は2つあります。両方の例を挙げます。

  1. Ggplot2の使用(一般に簡単)
  2. Rの組み込みプロット機能をcolorRampPallete関数と組み合わせて使用​​する(より複雑ですが、多くの人はRの組み込みプロット機能を好む/必要とします)

両方の例では、ggplot2 diamondsデータセットを使用します。数値列_diamond$carat_および_diamond$price_、および因子/カテゴリ列_diamond$color_を使用します。 ggplot2がインストールされている場合、次のコードでデータセットをロードできます。

_library(ggplot2)
data(diamonds)
_

Ggplot2とqplotを使用する

ワンライナーです。ここでの重要な項目は、qplot引数として色付けする係数をcolorに与えることです。 qplotはデフォルトで凡例を作成します。

_qplot(
  x = carat,
  y = price,
  data = diamonds,
  color = diamonds$color # color by factor color (I know, confusing)
)
_

出力は次のようになります。 qplot output colored by factor "diamond$color"

Rの組み込みプロット機能を使用する

Rの組み込みプロット機能を使用して、因子と関連する凡例で色付けされたプロットを取得するのは4ステップのプロセスであり、ggplot2を使用するよりも少し技術的です。

最初に、colorRampPallete関数を作成します。 colorRampPallete()は、色のリストを生成する新しい関数を返します。以下のスニペットでは、color_pallet_function(5)を呼び出すと、赤からオレンジ、青のスケールで5色のリストが返されます。

_color_pallete_function <- colorRampPalette(
  colors = c("red", "orange", "blue"),
  space = "Lab" # Option used when colors do not represent a quantitative scale
  )
_

第二に、ダイヤモンドの色ごとに正確に1色の色のリストを作成する必要があります。これは、個々のプロットポイントに色を割り当て、凡例を作成するために使用するマッピングです。

_num_colors <- nlevels(diamonds$color)
diamond_color_colors <- color_pallet_function(num_colors)
_

第三に、プロットを作成します。これは、作成した色のリストをcol引数として参照することを除いて、他のプロットと同じように実行されます。常にこの同じリストを使用する限り、色と_diamond$colors_とのマッピングはRスクリプト全体で一貫しています。

_plot(
  x = diamonds$carat,
  y = diamonds$price,
  xlab = "Carat",
  ylab = "Price",
  pch = 20, # solid dots increase the readability of this data plot
  col = diamond_color_colors[diamonds$color]
)
_

最後に、凡例を追加して、グラフを読んでいる人がプロットポイントの色と実際のダイヤモンドの色の間のマッピングを明確に見ることができるようにします。

_legend(
  x ="topleft",
  legend = paste("Color", levels(diamonds$color)), # for readability of legend
  col = diamond_color_colors,
  pch = 19, # same as pch=20, just smaller
  cex = .7 # scale the legend to look attractively sized
)
_

出力は次のようになります。 standard R plot output colored by factor "diamond$color"

気の利いたね?

16
Toby

latticeライブラリーも適切なオプションです。ここで、右側に凡例を追加し、それらの一部が重複しているため、ポイントをジッターしました。

xyplot(Sepal.Width ~ Sepal.Length, group=Species, data=iris, 
       auto.key=list(space="right"), 
       jitter.x=TRUE, jitter.y=TRUE)

example plot

11
Aaron

col関数のplot引数は、整数のベクトルに色を自動的に割り当てます。 iris$Speciesを数値に変換する場合、1、2、3のベクトルがあることに注意してください。これを次のように適用できます。

plot(iris$Sepal.Length, iris$Sepal.Width, col=as.numeric(iris$Species))

デフォルトの色の代わりに赤、青、緑が必要な場合、単純に調整できます。

plot(iris$Sepal.Length, iris$Sepal.Width, col=c('red', 'blue', 'green')[as.numeric(iris$Species)])

おそらく、上記のコードをさらに変更して、色の一意の組み合わせを取得する方法を見ることができます。

8
justin1.618