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の例、これは基本的に私が使用するのと同じダイヤモンドデータセットを使用しますが、パフォーマンスを向上させるために前にデータをトリミングすることに注意してください。
http://ggplot2.org/book/ マニュアル:http ://docs.ggplot2.org/current/
プロットポイントを係数で色付けし、対応する凡例を自動的に生成する方法は2つあります。両方の例を示します。
colorRampPallete
する(トリッキーですが、多くの人がRの組み込みのプロット機能を好む/必要とします)どちらの例でも、ggplot2ダイヤモンドデータセットを使用します。数値列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
)
気の利いたね?
関数の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)])
上記のコードをさらに変更して、独自の色の組み合わせを取得する方法をおそらく理解できます。
lattice
ライブラリは別の良いオプションです。ここでは、右側に凡例を追加し、一部が重なっているため、ポイントを揺らしました。
xyplot(Sepal.Width ~ Sepal.Length, group=Species, data=iris,
auto.key=list(space="right"),
jitter.x=TRUE, jitter.y=TRUE)