치료를 통해 데이터를 분리하는 산점도를 만들기 위해 R을 사용하는 좋은 방법은 무엇입니까?


30

나는 일반적으로 R과 통계에 매우 익숙하지만 기본 용량을 넘어서는 것으로 생각되는 산점도를 만들어야합니다.

나는 두 개의 관측치 벡터를 가지고 있으며 그것들과 함께 산점도를 만들고 싶어하며 각 쌍은 세 가지 범주 중 하나에 속합니다. 각 범주를 색상 또는 기호로 구분하는 산점도를 만들고 싶습니다. 나는 이것이 3 개의 다른 산점도를 생성하는 것보다 낫다고 생각합니다.

각 범주마다 한 지점에 큰 클러스터가 있지만 클러스터가 한 그룹에서 다른 두 그룹보다 더 크다는 사실에 또 다른 문제가 있습니다.

누구든지 이것을하는 좋은 방법을 알고 있습니까? 패키지를 설치하고 사용하는 방법을 배워야합니까? 누구 비슷한 일을 했습니까?

감사

답변:


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)
    헥스 빈
    패싯없이이 플롯을 처리 할 수 ​​있지만 종의 프라 이닝 순서는 최종 그림에 영향을줍니다.

  • 손을 약간 더럽 히고 (= 설명 및 코드 링크) 육각형의 혼합 색상을 계산 하려는 경우이를 피할 수 있습니다 . 여기에 이미지 설명을 입력하십시오

  • 또 다른 유용한 것은 고밀도 영역에 (헥스) 빈을 사용하고 다른 부분에 대한 단일 점을 플롯하는 것입니다.

    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 | 종, 홍채, 그룹 = 홍채종, pch = 20) </ code>


아름다운! 정말 고마워요, 육각 칸은 완벽하게 트릭을했습니다!
crf

22

이것은 '아이리스'데이터 세트의 고전적인 문제 중 하나입니다. 이것은 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격자 패키지 의 장점 중 하나입니다 . ggplot2는 특히 시각적으로 매력적인 플롯을 만듭니다. 두 패키지 모두 @cbeleites 의 답변설명되어 있습니다.


4
ggplot2를 권장하지만 예제에서 사용하지 않기 때문에 약간 혼란 스럽습니까? ggplot2에 해당하는 라이브러리 (ggplot2); qplot (Petal.Length, Petal.Width, color = Species, data = iris, main = "Edgar Anderson의 홍채 데이터"). 또한 범례를 자동으로 생성 할 수 있다는 이점이 있습니다.
피터 엘리스

@PeterEllis 그것은 ggplot2에 잘 어울리는 것을 인식 할 수 있기는하지만, 기본 그래픽과 만 경쟁 할뿐입니다.
Fomite 2016 년

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.