2つの変数の散布図を作成していますが、因子変数でポイントを色付けしたいと思います。再現可能なコードを次に示します。
data <- iris
plot(data$Sepal.Length, data$Sepal.Width, col=data$Species)
これはすべてうまくいきますが、どの要因がどの色に色付けされているかをどのように知ることができますか?
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でのより良いグラフィックのためにそれを提案するでしょう。
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に実行させることもできます。それぞれに同じ方法を使用する限り、問題ありません。
マイアサウラのように、ggplot2
。透明なリファレンスマニュアルが理由の1つです。ただし、これは簡単な方法の1つです。
require(ggplot2)
data(diamonds)
qplot(carat, price, data = diamonds, colour = color)
# example taken from Hadley's ggplot2 book
そして、有名な人が言ったように、プロット関連の投稿はプロットなしでは完全ではありません、結果は次のとおりです:
ここにいくつかの参照があります: qplot.R example 、これは基本的に私が使用する同じダイヤモンドデータセットを使用しますが、パフォーマンスを向上させるためにデータをトリミングします。
http://ggplot2.org/book/ マニュアル: http://docs.ggplot2.org/ current /
プロットポイントを係数で色付けし、対応する凡例を自動的に生成する方法は2つあります。両方の例を挙げます。
colorRampPallete
関数と組み合わせて使用する(より複雑ですが、多くの人はRの組み込みプロット機能を好む/必要とします)両方の例では、ggplot2 diamondsデータセットを使用します。数値列_diamond$carat
_および_diamond$price
_、および因子/カテゴリ列_diamond$color
_を使用します。 ggplot2がインストールされている場合、次のコードでデータセットをロードできます。
_library(ggplot2)
data(diamonds)
_
ワンライナーです。ここでの重要な項目は、qplot
引数として色付けする係数をcolor
に与えることです。 qplot
はデフォルトで凡例を作成します。
_qplot(
x = carat,
y = price,
data = diamonds,
color = diamonds$color # color by factor color (I know, confusing)
)
_
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
)
_
気の利いたね?
lattice
ライブラリーも適切なオプションです。ここで、右側に凡例を追加し、それらの一部が重複しているため、ポイントをジッターしました。
xyplot(Sepal.Width ~ Sepal.Length, group=Species, data=iris,
auto.key=list(space="right"),
jitter.x=TRUE, jitter.y=TRUE)
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)])
おそらく、上記のコードをさらに変更して、色の一意の組み合わせを取得する方法を見ることができます。