42

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

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

これはすべてうまくいっていますが、どの要素がどの色に着色されているかをどうやって知ることができますか?

4

6 に答える 6

56
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のより良いグラフィックスのためにそれを好み、提案したいと思います。

于 2011-10-11T05:05:18.703 に答える
42

このコマンド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にあなたのためにそれをさせることができます。それぞれに同じ方法を使用する限り、問題はありません。

于 2011-10-11T05:11:27.330 に答える
21

マイアサウラのように、私は好き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/

于 2011-10-11T07:49:05.380 に答える
19

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

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

どちらの例でも、ggplot2ダイヤモンドデータセットを使用します。数値列diamond$caratdiamond$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出力

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$colorsRスクリプト全体で一貫しています。

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
)

出力は次のようになります。 係数で色分けされた標準Rプロット出力

気の利いたね?

于 2015-10-15T19:27:16.717 に答える
16

関数の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)])

上記のコードをさらに変更して、独自の色の組み合わせを取得する方法をおそらく理解できます。

于 2016-01-01T16:45:13.647 に答える
12

latticeライブラリは別の良いオプションです。ここでは、右側に凡例を追加し、一部が重なっているため、ポイントを揺らしました。

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

プロット例

于 2011-10-11T12:54:29.423 に答える