R로 플로팅하려면 ggplot2 또는 ggvis를 배워야합니까?


38

R로 플로팅하려면 ggplot2 또는 ggvis를 배워야합니까? 나는 그들 중 하나가 어떤면에서 우월하다면 두 가지를 모두 배우고 싶지는 않습니다. R 커뮤니티가 기능이 겹치는 새 패키지를 계속 만드는 이유는 무엇입니까? 소개 블로그 게시물 ggvis는 정교한 플롯 패키지 ggplot2는 이미 주어진 만든 이유 단어를 언급하지 않습니다.


5
ggvis는 완전히 다른 물고기 주전자입니다. 실제 대안은 ggplot과 격자 사이 입니다.
갈라

1
답은 당신이 무엇을하는지에 달려 있다고 생각합니다. 정적 고급 플롯을 찾고 있다면을 배우고 싶을 것 ggplot2입니다. 웹 시각화의 경우을 고려하십시오 ggvis.
Roman Luštrik

답변:


39

ggplot2로 시작하십시오. 정적 플롯을 생성합니다.

정적 플롯 외에도 ggvis를 사용하여 대화 형 플롯을 만들 수도 있습니다. ggplot2의 구문을 배운 후 상호 작용을 추가하여 ggiv 플롯을 작성하는 구문은 자연스럽게 따릅니다.


4
이것은 정확하지 않습니다 (작성 당시에는 정확했을 수 있습니다). ggvis를 사용하여 정적 플롯을 만들 수 있습니다. 인터랙티브 플롯도 가능하다는 사실은 제한이 아닌 기능입니다. 정적 플롯의 간단한 예 :library('ggvis'); mtcars %>% ggvis(~wt, ~mpg) %>% layer_points(fill = ~factor(cyl))
Andre Terra

46

Dianne Cook의 답변을 조금 확장하고 싶습니다. 그녀가 말했듯이 ggplot2는 정적 플롯을 만들기위한 것이고 ggvis는 대화 형 플롯을위한 것입니다. 여기에는 여러 가지 의미가 있습니다.

파일 유형 ggvis 출력은 CSS 및 javascript 파일을 포함한 HTML입니다. ggvis는 자연스럽게 일반 이미지 파일을 출력하지 않습니다. ggplot2는 일반 이미지를 출력 한 다음 HTML, pdf 또는 gif 또는 이메일로 임베드 할 수 있습니다. ggvis, 당신이 파일을 이메일로 보내려면, 당신은 브라우저에서 볼 HTML 파일의 디렉토리를 압축합니다.

애니메이션 그 결과 애니메이션 을 만들려면 ggplot2에서 프레임을 만들어 병합 할 수 있지만 ggvis로이 작업을 수행 할 수있는 자연스러운 방법은 없습니다. 대화식으로 작동하는 ggvis는 "라이브"를 애니메이션으로 만들지 만 다른 종류의 애니메이션입니다. ggvis가 처리 할 수있는 것보다 프레임 당 더 많은 작업이 진행되는 경우 이미지를 생성하고 백그라운드에서 동영상을 만들어서 최소한 자연스럽게 처리 할 수는 없습니다. 마찬가지로 사용자는 ggvis에서 영화 나 gif 파일을 다운로드하여 재생할 수 없습니다.

현재 프로젝트에서 ggplot2가 대화식으로 애니메이션하기에는 너무 느리기 때문에 ggplot2에서 ggvis로 전환했습니다. 그러나 설정을 검토 한 후 "go"를 클릭하고 자신이 한 일에 대한 최고 속도의 부드러운 애니메이션 동영상을 다운로드 할 수 있기를 바랍니다. ggvis를 사용 하여이 작업을 수행하는 방법을 알지 못했지만 ggplot2를 사용하는 케이크 일 것입니다.

ggvis 속도 는 특히 데이터를 변경할 때 ggplot2보다 훨씬 빠릅니다. 각 ggplot2 플롯에는 1 초 또는 몇 개의 지연이 있습니다. ggvis는 두 번째 정도의 플롯을 만들 때 데이터를 변경 한 후 데이터를 원활하게 변경합니다. ggvis는 데이터에 "반응 적으로"링크되어 데이터가 변경 될 때마다 자체적으로 업데이트됩니다. ggplot2를 사용하면 전체 플롯이 다시 그려집니다.

스타일 및 모양 ggplot2 플롯은 언뜻 보면 ggvis 플롯보다 조금 더 멋지게 보입니다. ggplot2 플롯은 매우 우아합니다. ggvis 플롯은 더 간단하지만 나에게 자라고 있습니다. gpvis에 대한 아날로그가없는 xkcd 및 wesanderson 패키지와 같은 ggplot2의 확장 기능도 있습니다. ggplot2 플롯은 모두 같은 사람 (ggplot2의 저자)이 만든 것처럼 보이며 잠시 후에 피곤합니다.

완전성 ggplot2에서 ggvis가 지원하지 않는 플롯 유형이 있습니다. 예를 들어 ggvis에는 "rug"플롯 요소가 없습니다. ggvis로 만든 하나 또는 두 개의 choropleth를 보았지만 아직 기본 제공되는 지원은 없습니다. ggplot2에는 극좌표 (즉, 원형 차트)가 있으며 ggvis에는 없습니다. 또한 ggvis에서 누락되었습니다 (ggplot2 또는 ggplot2 확장에서 사용 가능) : boxplots; 등고선도; 자연 히트 맵; 자연 상관 차트; 도트 플롯; 바이올린 음모; 네트워크 플롯; 덴드로 그램. 물론 저는 아주 영리한 사람들이이 모든 것을 ggvis로 만들 수 있다고 확신하지만, 그렇게 영리하지는 않습니다.

주석 ggplot2는 매우 훌륭하고 활용률이 낮은 주석 프레임 워크를 가지고 있습니다. ggvis는 그렇지 않습니다.

서브 플롯 및 패싯 ggplot2는 매우 훌륭하지만 아마도 제한된 "페이스 팅"기능을 가지고 있습니다. 그리드 패키지를 사용하여 여러 ggplot2 플롯을 결합 할 수도 있습니다. 현재로서는 ggvis로 할 수 없습니다. ggvis 플롯은 단일 이미지로 결합 될 수 없으며 (이미지가 아니기 때문에 "라이브"웹 페이지이기 때문에) 어떤 종류의 패싯 또는 하위 플로팅도 지원하지 않습니다. 파이프 라인에 있어야합니다.

시각적 유연성 ggplot2는 모든 플롯이 동일하게 보이기를 원하므로 저자가 스타일을 선호하는 것처럼 보입니다. 예를 들어 ggplot2에 여러 y 축이있는 플롯을 만들 수있는 방법이 없습니다. ggvis가 할 수 있습니다. ggvis는 ggplot2보다 훨씬 유연합니다. 범례 숨기기, 여러 범례를 하나로 결합, 같은 음모에서 다른 것들에 대해 다른 척도를 사용하는 등의 작업을 수행하는 것이 훨씬 쉽습니다.

깊은 사용자 정의 기능은 당신은, 말하자면, 그것으로 새 영리한 스케일을 만들려면 너무 ggplot2에 (꽤 혼란하지만) 그렇게 열심히합니다. ggvis에서 많은 것을 할 수있는 방법이없는 것 같습니다. 어쩌면 아직 아닐 수도 있습니다.

시계열 ggplot2는 시계열을 그리는 것을 좋아하지 않습니다. 그것은 할 수 있지만하지 않습니다 원하는 . 실제로 어느 쪽도 원하지 않습니다. 둘 다 data.frame에 데이터가 공급되도록 고집하고 xts 또는 동물원 객체를 처리 할 수 ​​없습니다. 또한 시계열을 자르는 기능이 내장되어 있지 않습니다. 그러나 ggvis는 ggplot2만큼 어려운 시계열에 맞서 싸우지 않습니다. 그것은 부분적으로 ggvis 플롯에서 데이터를 업데이트하는 것이 너무 빠르기 때문이라고 생각합니다. 시계열을 플롯하려면 제출 중 하나를 이겨야하지만 ggvis는 수동 공격에 비해 훨씬 덜 수동적입니다.

그것들은 같은 구문인가? 일종의 ... 그들 사이에는 공통점이 많으며, 하나의 스타일 로 생각 하는 법을 배우면 다른 하나의 스타일에 적응하는 데 도움이됩니다. 특히, 두 코드는 모든 플로팅 호출이 한 줄의 코드로 서로 연결되도록 설계되었습니다. 이것의 주요 장점은 디버깅과 프로파일 링을 정말 어렵게 만들고 Rstudio와 같은 것들에서 디버깅 / 프로파일 링 기능을 쓸모 없게 만든다는 것입니다. 그 외에는 문법적으로 상당히 다릅니다. ggplot2에서 어려운 것들이 ggvis에서 쉽습니다. ggplot2에서 쉬운 것은 ggvis에서 불가능합니다. 그 반대. (저는 ggvis가하는 일을 선호합니다. 이해하기 쉽습니다.)

버그 ggvis는 여전히 꽤 있습니다. 때때로 그것은 이상하게 행동합니다. 그러나 때로는 해결하는 데 몇 시간이 걸리고 이해가 거의되지 않는 이유로 음모가 임의로 사라지는 경우가 있습니다. 개발자들은 이것을 자유롭게 인정하고, ggvis는 아직 생산 준비가되지 않았습니다. 복잡성을 다루면 농담이 아니라는 것을 알게 될 것 입니다.

결론 : 각각의 중간 그림을 배우는 데 약 16 시간이 걸립니다. 현실적으로, 당신은 아마 둘 다 배울 것입니다.


1
훌륭한 비교
스칸

빠른 ggvis, 격자 또는 rgl은 무엇입니까? (대규모 데이터 세트)
skan

환상적인 쓰기 +1. 나는 지금까지의 경험을 바탕으로 여기의 모든 것에 동의합니다.
David Crook

안녕하세요, ggvis vs rcharts는 어떻습니까?
skan

타임 시리즈 : ggplot2가 확장 ggfortify로 확실히 승리합니다. rpubs.com/sinhrks/basics 에 관한 훌륭한 문서를 참조하십시오 .
Archimede

10

다음에 나타나는 메시지 library(ggvis)는 자명 하다고 생각합니다 .

ggvis API는 현재 빠르게 발전하고 있습니다. 프로덕션 환경에 의존하지 말고 자유롭게 탐색하십시오. 명확한 버그가 발생하면 https://github.com/rstudio/ggvis/issues에 최소한의 재현 가능한 예제를 제출 하십시오 . 질문 및 기타 토론은 https://groups.google.com/group/ggvis 를 사용 하십시오 .

ggplot2와 비교할 때 ggvis에는 여전히 일부 기능이 없으며 광택이 있습니다 (예 : 눈금 레이블과 겹치는 축 제목과 더 많은 패싯이 지원되지 않는 축 제목과 같은 그래프에 제목을 추가하는 방법은 없습니다). 좀 더 깨끗하고 상호 작용이 정말 대단합니다.

내 자신의 경험에서 빛나는 응용 프로그램을 구축하는 경우 ggvis는 필수입니다. 그런 다음 웹 및 R 친화 그래프 플로팅 엔진을 사용하면 현재 가지고있는 결함보다 훨씬 많은 이점이 있습니다.

데이터 탐색을 위해 정적 그래프를 작성하려는 경우 ggplot2는 많은 멋진 기능과 건강한 사용자 커뮤니티 및 학습 할 리소스가 많은 성숙한 라이브러리입니다.

두 패키지의 기본 철학은 비슷하므로 한 패키지에서 다른 패키지로 기술을 쉽게 옮길 수 있습니다.


8

R 커뮤니티는 다음과 같은 여러 가지 이유로 새로운 (종종 겹치는) 패키지를 계속 제공합니다.

1) 누군가가 기존 패키지에서 사용할 수없는 것을 변경하거나 추가하려고하지만 많은 부분이 겹칩니다 (따라서 많은 패키지가 회귀합니다)

2) 누군가가 과제로 패키지를 씁니다.

3) 패키지 작성은 재미있다 (만약 당신이 그런 것을 좋아한다면)

4) 그들은 원래 패키지가 존재하는지 모른다


9
구체적인 예와 요점에 관해서는 : ggvis는 ggplot2와 같은 사람들이 작성합니다. 여기서 중요한 점은 ggplot2의 사용이 널리 확산되어 기존 코드 / 종속 패키지를 많이 손상시키지 않으면 서 변경을 구현하는 것이 불가능하다는 것입니다.
Roland

1
이런 종류의 기존 패키지의 재창조는 자본주의 사회의 경제 불황처럼 일어날 것인가?
qazwsx

2
@ 피터 : R의 외부인으로서 이것은 공정한 의견처럼 보이지만 (가장 이상하게도) 당신은 질문에 대답하지 않습니다!
Nick Cox

@ NickCox 나는 질문에있는 질문 중 하나에 대답했습니다. :-).
Peter Flom-Monica Monica 복원

1
@ 피터 매우 공정한 포인트. stats.stackexchange.com/questions/58966/…에 대한 상호 참조 는 따라서 적절하다고 생각합니다.
Nick Cox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.