Rを使用して、処理ごとにデータを分離する散布図を作成する良い方法は何ですか?


30

私は一般的にRと統計について非常に新しいですが、私はそのネイティブの能力を超えていると思われる散布図を作成する必要があります。

観測値のベクトルがいくつかあり、それらを使用して散布図を作成します。各ペアは3つのカテゴリのうちの1つに分類されます。色または記号で各カテゴリを区切る散布図を作成したいと思います。これは、3つの異なる散布図を生成するよりも優れていると思います。

各カテゴリでは、ある時点で大きなクラスターが存在するという事実に別の問題がありますが、クラスターは他の2つのグループよりも1つのグループで大きくなります。

誰かがこれを行う良い方法を知っていますか?パッケージをインストールして使用方法を学習する必要がありますか?誰でも似たようなことをしましたか?

ありがとう

回答:


53

大きなクラスター:オーバープリントが問題になる場合は、低いアルファを使用して単一のポイントを暗くすることもできますが、優先順位を上げると色が強くなります。または、2Dヒストグラムまたは密度推定に切り替えます。

require ("ggplot2")
  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, colour = Species)) + stat_density2d ()
    密度
    あなたはおそらくこれをファセットにしたいでしょう...

  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, fill = Species)) + stat_binhex (bins=5, aes (alpha = ..count..)) + facet_grid (. ~ Species)
    hexbin
    ファセットを使用せずにこのプロットを実行することもできますが、種の優先順位は最終的な図に影響します。

  • 少し手を汚したい場合は、これを避けることができます(=説明とコードへのリンク)、六角形の混合色を計算する。 ここに画像の説明を入力してください

  • 別の便利なことは、高密度エリアに(16進)ビンを使用し、他の部分に単一ポイントをプロットすることです。

    ggplot (df, aes (x = date, y = t5)) + 
      stat_binhex (data = df [df$t5 <= 0.5,], bins = nrow (df) / 250) +
          geom_point (data = df [df$t5 > 0.5,], aes (col = type), shape = 3) +
      scale_fill_gradient (low = "#AAAAFF", high = "#000080") +
      scale_colour_manual ("response type", 
        values = c (normal = "black", timeout = "red")) + 
      ylab ("t / s")

    ここに画像の説明を入力してください


プロットパッケージを完全にするために、以下についても言及させてくださいlattice

require ("lattice")
  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, pch= 20)
    <code> xyplot(Sepal.Width〜Sepal.Length |種、虹彩、pch = 20)</ code>

  • xyplot(Sepal.Width ~ Sepal.Length, iris, groups = iris$Species, pch= 20)
    <code> xyplot(Sepal.Width〜Sepal.Length、iris、groups = iris $ Species、pch = 20)</ code>

  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, groups = iris$Species, pch= 20)
    <code> xyplot(Sepal.Width〜Sepal.Length | Species、iris、groups = iris $ Species、pch = 20)</ code>


ラブリー!どうもありがとう、16進数のビンは完璧にトリックをしました!
-crf

22

これは、「アイリス」データセットの古典的な問題の1つです。これはリンクです Rコードを含むデータセットに基づいたプロットプロジェクトのセット全体へであり、問​​題に適応できる場合があります。

これは、アドオンパッケージではなくベースRで使用するアプローチです。

plot(iris$Petal.Length, iris$Petal.Width, pch=21, 
     bg=c("red","green3","blue")[unclass(iris$Species)], 
     main="Edgar Anderson's Iris Data")

この図を生成します:

ここに画像の説明を入力してください

そこから、プロットに応じて、アルファ/透明度レベルをいじり始めて、オーバープロットなどを行うことができますが、最初に非常に基本的なグラフから作成します。

ベースRに固執する多くの理由がありますが、他のパッケージはプロットを単純化します。特徴的な機能によってデータを分離することは、ggplot2およびラティスパッケージの強みの1つです。ggplot2は、特に視覚的に魅力的なプロットを作成します。両方のパッケージは、@ cbeleitesによる回答で実証されています


4
ggplot2をお勧めしますが、例では使用しないので、少し混乱しますか?ggplot2に相当するwoudl be library(ggplot2); qplot(Petal.Length、Petal.Width、color = Species、data = iris、main = "Edgar Anderson's Iris Data")。これには、凡例を自動的に生成するという利点もあります。
ピーターエリス

@PeterEllisそれは、ggplot2に適したものを認識できる一方で、基本的なグラフィックスについては非常に有能だからです。
フォマイト

1
ベースグラフィックスのBTWでunclass()を使用した素晴らしいトリック
ピーターエリス

16

またはggplot2で:

ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species)) + geom_point()
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() + facet_grid(~Species)

生産する

ここに画像の説明を入力してください

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.