가장 많이 사용되지 않는 데이터 시각화 [닫기]


178

히스토그램과 산점도는 데이터와 변수 간의 관계를 시각화하는 훌륭한 방법이지만 최근에 어떤 시각화 기술이 누락되었는지 궁금합니다. 가장 많이 사용되지 않는 줄거리 유형은 무엇이라고 생각하십니까?

답변은 :

  1. 실제로는 일반적으로 사용되지 않습니다.
  2. 많은 배경 토론없이 이해할 수 있습니다.
  3. 많은 일반적인 상황에 적용 할 수 있습니다.
  4. 예제를 만들기 위해 재현 가능한 코드를 포함하십시오 (바람직하게는 R). 연결된 이미지가 좋을 것입니다.

13
나는 이것이 매우 유용한 토론이라고 생각하며 닫혀서 슬프다.
Alex Brown

2
@AlexBrown : 그렇다면 다시 열려면 투표하지 않겠습니까? 이 질문의 문구가 "건설적이지 않은"것처럼 느껴지는 이유를 알 수 있지만,이 질문으로 인해 웹 어디에서나이 주제에 대해 가장 신중하고 통찰력있는 답변을 얻을 수있었습니다. 이 답변이 업데이트되고 확장되는 것을보고 싶습니다.
최대

2
아마도 stats.stackoverflow.com으로 이동해야합니다. 해당 사이트에 훨씬 더 적합합니다.
naught101

4
동정 아무도 언급하지 QQ-플롯을 이 폐쇄되기 전에 여기. 그들은 너무 유용합니다!
naught101

다시 열어야합니다.
Peter Flom

답변:


89

나는 다른 포스터에 정말 동의합니다 : Tufte의 책은 환상 적이고 읽을만한 가치가 있습니다.

먼저, 올해 초 "데이터 찾기"의 ggplot2 및 ggobi에 대한 유용한 자습서를 소개하겠습니다 . 그 외에도 R에서 하나의 시각화와 두 개의 그래픽 패키지 (기본 그래픽, 격자 또는 ggplot만큼 널리 사용되지 않는)를 강조하겠습니다.

히트 맵

다변량 데이터, 특히 시계열 데이터를 처리 할 수있는 시각화가 정말 좋습니다. 히트 맵 이 유용 할 수 있습니다. 정말 깔끔한 하나는 David Smith가 Revolutions 블로그에 소개했습니다 . Hadley가 제공 한 ggplot 코드는 다음과 같습니다.

stock <- "MSFT"
start.date <- "2006-01-12"
end.date <- Sys.Date()
quote <- paste("http://ichart.finance.yahoo.com/table.csv?s=",
                stock, "&a=", substr(start.date,6,7),
                "&b=", substr(start.date, 9, 10),
                "&c=", substr(start.date, 1,4), 
                "&d=", substr(end.date,6,7),
                "&e=", substr(end.date, 9, 10),
                "&f=", substr(end.date, 1,4),
                "&g=d&ignore=.csv", sep="")    
stock.data <- read.csv(quote, as.is=TRUE)
stock.data <- transform(stock.data,
  week = as.POSIXlt(Date)$yday %/% 7 + 1,
  wday = as.POSIXlt(Date)$wday,
  year = as.POSIXlt(Date)$year + 1900)

library(ggplot2)
ggplot(stock.data, aes(week, wday, fill = Adj.Close)) + 
  geom_tile(colour = "white") + 
  scale_fill_gradientn(colours = c("#D61818","#FFAE63","#FFFFBD","#B5E384")) + 
  facet_wrap(~ year, ncol = 1)

어느 쪽이 다음과 같이 보입니다.

대체 텍스트

RGL : 대화식 3D 그래픽

배우려는 노력의 가치가있는 또 다른 패키지는 대화식 3D 그래픽을 쉽게 만들 수있는 RGL 입니다. 온라인에 대한 많은 예제가 있습니다 (rgl 문서 포함).

R-Wiki에는 rgl을 사용하여 3D 산점도를 그리는 방법에 대한 좋은 예가 있습니다.

고비

알아야 할 또 다른 패키지는 rggobi 입니다. 이 주제에 스프링 책은 훌륭한 많은 문서 / 예는에 포함, 온라인 및 "데이터를 보면" 물론.


좋은. 코드 / 이미지를 포함 해 주셔서 감사합니다.
Ian Fellows

'Z'의 수직 위치로 표시되거나 검은 실선으로 구부러지는 것은 무엇입니까?
doug

그것들은 월 경계입니다 (월은 같은 날에 끝나지 않습니다).
Shane

3
아름답습니다. 월간 경계는 어떻게 얻었습니까?
Alex Brown


58

나는 도트 플롯을 정말로 좋아 하며 적절한 데이터 문제에 대해 다른 사람들에게 추천 할 때 항상 놀라고 기뻐합니다. 그들은 많이 사용하지 않는 것 같아서 이유를 알 수 없습니다.

다음은 Quick-R의 예입니다. 자동차 데이터에 대한 플롯

나는 클리블랜드가 이들의 개발과 공포에 가장 큰 책임을지고 있다고 생각하며, 그의 책 (예 : 결함이있는 데이터가 도트 플롯으로 쉽게 감지 된)의 예가 그들의 사용에 대한 강력한 논증이다. 위의 예는 한 줄에 하나의 점만 넣는 반면 실제 출력은 각 줄에 여러 개의 점이 있으며 어느 쪽이 어느 것인지 설명하는 범례가 있습니다. 예를 들어, 세 가지 다른 시점에 다른 심볼이나 색상을 사용할 수 있으며, 따라서 다른 카테고리에서 쉽게 시간 패턴을 얻을 수 있습니다.

다음 예제 (모든 일을 Excel에서 완료했습니다!)에서 레이블 교환으로 인해 어떤 범주가 발생했는지 명확하게 확인할 수 있습니다.

그룹이 2 개인 도트 플롯


1
축이 전환 된 축이있는 산점도와 점표는 어떻게 다릅니 까?
DrSAR

4
@DrSAR 막대 그래프와 히스토그램이 어떻게 다릅니 까? 보다 기본적인 형태 (참조 Bertin의 Semiologie Graphique )로 많은 표준 차트 유형을 설명 할 수 있지만, 고유하지 않은 방식으로 무언가를 표현하는 데 대한 통찰력은 아닙니다. 이 경우 하나의 연속 데이터에 대해 두 개의 범주 형 정보 (하나는 세로로, 하나는 플로팅 문자 모양으로 표시)를 플로팅합니다. 대부분의 소프트웨어 패키지에서는 산점도를 해킹하여 산점도를 만들지 만 산점도는 아닙니다.
Ari B. Friedman

2
@ gsk3 으르렁 거리는 소리는 아니었다. 사실, 나는 지금 (그래픽과 유사한 작품의 문법에 대해 더 많이 읽은 후)이 높은 수준의 구별이 프리젠 테이션에 매우 중요하다는 것을 알고 있습니다. 이것을 보여 주셔서 감사합니다.
DrSAR

@DrSAR 그리고 나는 방어 적으로 들리는 것을 의미하지 않았습니다. SO 의견의 본질 ;-)
Ari B. Friedman

56

극좌표를 사용하는 플롯은 확실히 사용되지 않습니다. 일부는 정당한 이유가 있습니다. 나는 그들의 사용을 정당화하는 상황은 일반적이지 않다고 생각한다. 또한 이러한 상황이 발생하면 극좌표는 선형 도표로는 불가능한 데이터 패턴을 나타낼 수 있다고 생각합니다.

때로는 데이터가 선형이 아니라 본질적으로 극좌표 이기 때문에 데이터가 주기적이거나 (24 일 동안 24 시간 동안 여러 시간 동안 시간을 ​​나타내는 x 좌표) 데이터가 이전에 극좌표 형상 공간에 매핑 되었기 때문이라고 생각합니다 .

다음은 예입니다. 이 그림은 시간별 웹 사이트의 평균 트래픽 양을 보여줍니다. 오후 10시와 오전 1시에 두 개의 급등에 주목하십시오. 사이트의 네트워크 엔지니어에게는 중요한 역할을합니다. 또한 서로 가까이 ( 시간 간격으로) 발생한다는 점도 중요합니다 . 그러나 기존 좌표계에서 동일한 데이터를 플로팅하면이 패턴이 완전히 숨겨져 선형으로 표시됩니다.이 두 스파이크는 20 시간 간격으로 연속 날짜에 2 시간 간격으로 표시됩니다. 위의 극좌표 차트는이 내용을 포용적이고 직관적 인 방식으로 보여줍니다 (전설은 필요하지 않음).

1 시간과 22 시간에 피크가있는 사이트 트래픽을 보여주는 극좌표 차트

R을 사용하여 이와 같은 플롯을 만드는 방법에는 두 가지가 있습니다 (알고 있습니다). 하나는 기본 또는 그리드 그래픽 시스템에서 자신의 기능을 코딩하는 것입니다. 더 쉬운 다른 방법은 순환 패키지 를 사용하는 것 입니다. 사용할 함수는 ' rose.diag '입니다.

data = c(35, 78, 34, 25, 21, 17, 22, 19, 25, 18, 25, 21, 16, 20, 26, 
                 19, 24, 18, 23, 25, 24, 25, 71, 27)
three_palettes = c(brewer.pal(12, "Set3"), brewer.pal(8, "Accent"), 
                   brewer.pal(9, "Set1"))
rose.diag(data, bins=24, main="Daily Site Traffic by Hour", col=three_palettes)

4
코드를 복사하면 매우 다른 음모가 나옵니다 (매우 추악합니다). 왜 그런지 알아? 이 경고가 나타납니다. 1 : In. as.circular (xx [, 1]) : 객체는 다음 구성 요소의 기본값을 사용하여 'circular'클래스로 강제 변환됩니다. type : 'angles'units : 'radians'template : ' none '모듈러스 :'asis '0 : 0 회전 :'counter 'rose.diagdata24 Hourthree_palettes에 의한 일일 사이트 트래픽
datayoda

나도 같은 문제가있어.
crayola 2016 년

라인 플롯 으로도이 작업을 수행 할 수 있습니다. 읽기가 조금 더 어려울 수 있지만보다 세분화 된 데이터 또는 둘 이상의주기를 겪는 데이터 (예 : 10주기를 플롯 한 다음 평균을 플롯)의 경우에도 정말 좋습니다.
naught101

1
또한 줄거리를 복제하는 데 문제가있었습니다. 결국 ggplot2를 사용하는 것이 더 쉽다는 결론을 내 렸습니다. 나는 코드와 결과 Rpubs에 짧은 데모를 왼쪽했습니다 rpubs.com/mattbagg/circular
MattBagg

1
ggplot2 해당 :qplot(y=data, x=1:length(data), fill=factor(1:length(data)), stat='identity', geom='bar') + coord_polar()
naught101

54

산점도에 점이 너무 많아 완전히 엉망이되면 부드러운 산점도를 사용해보십시오. 예를 들면 다음과 같습니다.

library(mlbench) ## this package has a smiley function
n <- 1e5 ## number of points
p <- mlbench.smiley(n,sd1 = 0.4, sd2 = 0.4) ## make a smiley :-)
x <- p$x[,1]; y <- p$x[,2]
par(mfrow = c(1,2)) ## plot side by side
plot(x,y) ## left plot, regular scatter plot
smoothScatter(x,y) ## right plot, smoothed scatter plot

hexbin(@Dirk Eddelbuettel 제안) 패키지는 동일한 목적으로 사용되지만, smoothScatter()그것이 속한 이점 갖는 graphics패키지, 따라서 표준 R 설치 부분이다.

규칙적이거나 부드러운 산점도로서의 스마일리


6
완벽을 기하기 위해 기하 점과 함께 투명도 (알파)를 사용하여 ggplot에서이 효과를 얻을 수도 있습니다.
Paul Hiemstra

1
이것은 커널 밀도 추정과 동일합니까, 아니면 비슷합니까?
endolith

30

스파크 라인 및 기타 Tufte 아이디어와 관련 하여 CRANYaleToolkit 패키지 는 기능 및을 제공합니다 . sparklinesparklines

대용량 데이터 세트에 유용한 또 다른 패키지는 데이터를 버킷에 영리하게 '고정'하여 순진 산점도에 비해 너무 큰 데이터 세트를 처리하므로 헥사 빈입니다.


4
스파크 라인에 +1 현재 R에서 스파크 라인 생성에 중점을 둔 패키지를 개발 중입니다. 그들은 Sweave 보고서의 테이블에 크게 추가되었습니다.
Sharpie

1
멋있는! Jay가 YaleToolkit에 가지고있는 것에 너무 만족하지 않으며 테이블에 스파크 라인을 갖고 싶습니다!
Dirk Eddelbuettel

난 그냥만을 사용하여 스파크 생산하는 방법을 문서화 한 plot내의 업데이트에 이상 질문 이의 도움으로, 터프 포럼 포스트

1
Hmisc::latex()로부터 출력 된 버전은 Hmisc::describe표에 포함 된 도착 미니 히스토그램을 포함한다.
IRTFM

28

바이올린 플롯 (상자 플롯과 커널 밀도를 결합한)은 비교적 이국적이고 매우 시원합니다. R 의 vioplot 패키지를 사용하면 쉽게 만들 수 있습니다.

다음은 예제입니다 (wikipedia 링크도 예제를 보여줍니다).

여기에 이미지 설명을 입력하십시오


3
바이올린 도표는 격자 패키지를 통해서도 이용할 수 있습니다 :bwplot(... panel = panel.violin)
David J.

3
바이올린 플롯의 ggplot2 버전이 곧 나옵니다. github.com/wch/ggplot2/wiki/geom_violin
Roman Luštrik

나는 얇은 바이올린 음모가 그렇게 유용하지 않기 때문에 모든 점을 지터로 표시하는 것을 좋아합니다.
Nakx

25

방금 검토 한 또 다른 멋진 시계열 시각화 는 "범프 차트"입니다 ( 이 게시물의 "Learning R"블로그에 나와 있음 ). 시간이 지남에 따라 위치 변화를 시각화하는 데 매우 유용합니다.

http://learnr.wordpress.com/ 에서 작성하는 방법에 대해 읽을 수 있지만 다음과 같이 보입니다.

대체 텍스트


나는이 특정 데이터에 대한 범프 차트를 좋아하지만 더 일반적인 상황을 생각하기가 어렵습니다. 즉, Learning R 블로그가 양말을 흔드는 것에 우리 모두 동의 할 수 있다고 생각합니다.
Ian Fellows

7
범프 차트는 순위가 매겨진 데이터의 평행 좌표 플롯입니다.
hadley

1
시간이 지남에 따라 순위 변화 또는 순위 간의 관계를 나타내는 데 유용한 기울기 그래프를 상기시킵니다. charliepark.org/slopegraphs
topchef

21

또한 Tufte의 boxplots 수정을 좋아합니다. 작은 배수는 가로가 매우 "얇고"중복 잉크로 줄거리를 작성하지 않기 때문에 훨씬 쉽게 비교할 수 있습니다. 그러나 상당히 많은 수의 범주에서 가장 잘 작동합니다. 줄거리에 몇 개만 있다면 정규 (Tukey) 상자 그림은 조금 더 무겁기 때문에 더 좋아 보입니다.

library(lattice)
library(taRifx)
compareplot(~weight | Diet * Time * Chick, 
  data.frame=cw , 
  main = "Chick Weights",
  box.show.mean=FALSE,
  box.show.whiskers=FALSE,
  box.show.box=FALSE
  )

비교하다

이것들을 만드는 다른 방법들 (다른 종류의 Tufte boxplot 포함) 이이 질문에서 논의됩니다 .


@daroczig 감사합니다. 요즘에는 그룹을 다르게 구성하기 위해 다시 작성하겠습니다. 그 기능을 쓴 이후로 많은 것을 배웠습니다!
Ari B. Friedman

1
나는 당신의 음모가 터프의 것보다 훨씬 낫습니다. Tukey 스타일의 상자 그림이 더 낫다고 생각하지만 좋은 타협은 여기있는 것과 같지만 1px 오프셋 대신 3px 너비의 상자가 있습니다. 그리고 중앙값에 대한 1px 너비의 horisontal 라인이 더 깔끔하고 정확하다고 생각합니다.
naught101

19

우리는 귀엽고 (역사적으로) 중요한 줄기-잎 그림 (Tufte가 좋아하는)을 잊지 말아야합니다. 데이터 밀도와 모양에 대한 직접적인 수치 개요를 얻을 수 있습니다 (물론 데이터 세트가 약 200 포인트보다 크지 않은 경우). R에서 함수 stem는 줄기 및 잎 디 레이를 생성합니다 (작업 공간에서). fmsbgstem 패키지의 함수 를 사용 하여 그래픽 장치에 직접 그리는 것을 선호합니다 . 다음은 줄기 별 표시에서 비버 체온 변화 (데이터는 기본 데이터 세트에 있어야 함)입니다.

  require(fmsb)
  gstem(beaver1$temp)

여기에 이미지 설명을 입력하십시오



15

Tufte의 훌륭한 작품 외에도 William S. Cleveland의 책 : 데이터 시각화데이터 요소 . 그들은 우수 할뿐만 아니라 R에서 모두 완료되었으며 코드가 공개적으로 사용 가능하다고 생각합니다.


14

박스 플롯! R 도움말의 예 :

boxplot(count ~ spray, data = InsectSprays, col = "lightgray")

제 생각에는 데이터를 빠르게 보거나 분포를 비교하는 가장 편리한 방법입니다. 보다 복잡한 배포를 위해이라는 확장자가 vioplot있습니다.


2
Beanplot뿐만 아니라 여기에 언급 할 수 jstatsoft.org/v28/c01/papercran.r-project.org/web/packages/beanplot/index.html
라덱

박스 플롯은 그렇게 많이 사용되지 않습니까? 많은 논문에서 막대 차트는 상자 그림으로 사용해야하는 데이터에 사용되지만 여전히 일반적입니다.
naught101

11

모자이크 플롯은 언급 한 네 가지 기준을 모두 충족시키는 것 같습니다. r의 mosaicplot 아래에 예가 있습니다.


3
모자이크 플롯의 더 나은 구현은 vcd 라이브러리 (함수 이름 'mosaic')에 있습니다. 훨씬 더 유연한 메소드 서명이 있으며 '베이스'그래픽 시스템이 아닌 그리드로 구현됩니다.
doug

10

Edward Tufte의 작품과 특히이 책을 확인하십시오

당신은 또한 그의 여행 프리젠 테이션을 시도하고 잡을 수 있습니다 . 그것은 꽤 좋고 그의 4 권의 책 묶음을 포함하고 있습니다. (저는 그의 출판사의 주식을 가지고 있지 않다고 맹세합니다!)

그건 그렇고, 나는 그의 스파크 라인 데이터 시각화 기술을 좋아합니다. 놀라다! 구글은 이미 그것을 작성하고 구글 코드 에 넣어


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.