graphics - visualizations - r scatter plot




大多數未充分利用的數據可視化 (10)

直方圖和散點圖是數據可視化和變量之間關係的很好方法,但最近我一直在想我缺少哪些可視化技術。 你認為什麼是最不被充分利用的情節?

答案應該是:

  1. 在實踐中不常用。
  2. 沒有很多背景討論就可以理解。
  3. 適用於許多常見情況。
  4. 包含可重複的代碼來創建一個示例(最好在R中)。 鏈接的圖像會很好。

小提琴情節 (結合盒密度與核密度)是相對特殊和非常酷的。 R中的vioplot軟件包可讓您輕鬆製作它們。

這是一個例子(維基百科鏈接也顯示了一個例子):



如果散點圖有太多的點以至於變得完全混亂,請嘗試使用平滑的散點圖。 這裡是一個例子:

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安裝的一部分。


我也喜歡Tufte對boxlot的修改,它可以讓你更輕鬆地進行小倍數比較,因為它們水平非常“薄”,不會讓冗餘墨水混亂。 但是,它適用於相當多的類別; 如果你在劇情上只有一些,那麼經常(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)的其他方法。



我非常同意其他海報: 塔夫特的書很棒 ,值得一讀。

首先,我會在今年早些時候向您指出一個關於ggplot2和ggobi的非常好的教程,內容來自“查看數據”。 除此之外,我只會強調R的一個可視化和兩個圖形包(它們不像基本圖形,點陣或ggplot那樣廣泛使用):

熱圖

我非常喜歡可以處理多元數據的可視化,尤其是時間序列數據。 熱圖對此可能很有用。 大衛史密斯在革命博客上介紹了一篇非常整齊的文章 。 這是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圖形

另一個非常值得學習的軟件包是RGL ,它很容易提供創建交互式3D圖形的能力。 網上有很多例子(包括在rgl文檔中)。

R-Wiki有一個很好的例子 ,說明如何使用rgl繪製三維散點圖。

GGobi

另一個值得了解的軟件包是rggobi 。 有關於此主題的Springer書以及大量在線文檔/示例,包括“查看數據”課程。



盒形圖! R幫助中的示例:

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

在我看來,它是快速查看數據或比較分佈的最方便的方式。 對於更複雜的分佈,有一個稱為vioplot的擴展。


關於YaleToolkit和其他Tufte的想法, CRAN上的YaleToolkit包提供函數sparklinesparklines

另一個對大數據集很有用的軟件包是hexbin因為它巧妙地將數據“分”到桶中以處理可能對於天真散點圖而言太大的數據集。


除了Tufte出色的工作之外,我還推薦William S. Cleveland的書籍: 可視化數據圖形數據元素 。 它們不僅非常出色,而且都是用R完成的,我相信代碼是公開的。