Learn R | 交互可視化之Plotly包(二)

一、Bars & Histograms

在plotly包中分別使用add_bars()add_histograms()函數來繪製基本的條形圖和直方圖(不同之處就在於條形圖需要指定兩個變數,而直方圖僅需要指定一個變數)

# 使用ggplot2包中的diamonds數據集> p1 <- plot_ly(diamonds, x = ~cut) %>% add_histogram()> p2 <- diamonds %>%+ dplyr::count(cut) %>%+ plot_ly(x = ~cut, y = ~n) %>% + add_bars()> subplot(p1, p2) %>% hide_legend()

1. 多重數值變數的分布圖(Multiple numeric distributions)

以diamonds數據集為例,假設我們需要繪製在不同的clarity情況下價格分布圖,首先觀察數據集的基本情況:

> summary(diamonds$clarity) I1 SI2 SI1 VS2 VS1 VVS2 VVS1 IF 741 9194 13065 12258 8171 5066 3655 1790

很顯然,我們需要將這八類分布同時繪製在一幅圖形上,而plotly包暫時沒有對應的函數,所以我們採取一個折中的辦法,使用自編函數。

> one_plot <- function(d) {+ plot_ly(d, x = ~price) %>%+ add_annotations(+ ~unique(clarity), x = 0.5, y = 1, + xref = "paper", yref = "paper", showarrow = FALSE+ )+ }

# 這裡使用了one_plot(),split(),lapply()等函數> diamonds %>%+ split(.$clarity) %>%+ lapply(one_plot) %>% + subplot(nrows = 2, shareX = TRUE, titleX = FALSE) %>%+ hide_legend()

2. 多重離散變數的分布圖(Multiple discrete distributions)

在diamonds數據集中,變數cut和clarity都是離散變數,假設我們需要繪製在cut的不同的水平下變數clarity各類型的分布,那麼怎麼樣使用plotly來繪製呢?

# 查看數據集基本信息> summary(diamonds$cut) Fair Good Very Good Premium Ideal 1610 4906 12082 13791 21551 > summary(diamonds$clarity) I1 SI2 SI1 VS2 VS1 VVS2 VVS1 IF 741 9194 13065 12258 8171 5066 3655 1790

# cut為x軸變數,用不同的顏色表示clarity的不同水平> plot_ly(diamonds, x = ~cut, color = ~clarity) %>% add_histogram()

上圖為基於實際值的具體分布狀況,我們也可以繪製基於相對數(佔比)的直方圖,並堆積擺放。

# 數據預處理> data <- count(diamonds, cut, clarity)> data_2 <- left_join(data, count(data, cut, wt = n))> data_2Source: local data frame [40 x 4]Groups: cut [?] cut clarity n nn <ord> <ord> <int> <int>1 Fair I1 210 16102 Fair SI2 466 16103 Fair SI1 408 16104 Fair VS2 261 16105 Fair VS1 170 16106 Fair VVS2 69 16107 Fair VVS1 17 16108 Fair IF 9 16109 Good I1 96 490610 Good SI2 1081 4906# ... with 30 more rows

> data_2 %>%+ mutate(prop = n / nn) %>%+ plot_ly(x = ~cut, y = ~prop, color = ~clarity) %>%+ add_bars() %>%+ layout(barmode = "stack")

當然,我們也可以繪製基於ggplot2風格的同樣類型的圖表(需要使用ggmosaic包)

> library(ggmosaic)> p <- ggplot(data = data_2) + geom_mosaic(aes(weight = n, x = product(cut), fill = clarity))> ggplotly(p)

二、Boxplots

使用add_boxplot()函數進行箱線圖繪製。

> p <- plot_ly(iris,y=~Sepal.Length,boxpoints = "suspectedoutliers")> p1 <- p %>% add_boxplot(x = "Overall")# 分類別觀察> p2 <- p %>% add_boxplot(x = ~Species)> subplot(p1,p2)

# 把兩幅圖合併在一起> subplot(+ p1, p2, shareY = TRUE,+ widths = c(0.25, 0.75), margin = 0+ ) %>% hide_legend()

# 觀察在兩個離散變數的分類下價格的箱線圖# 設置clarity變數為不同顏色填充依據,以此進行各箱線圖區分> plot_ly(diamonds, x = ~price, y = ~interaction(clarity, cut)) %>%+ add_boxplot(color = ~clarity) %>%+ layout(yaxis = list(title = ""), margin = list(l = 100))

三、Pie Plot

# 數據預處理> data_1 <- data.frame(count(diamonds,cut))> data_1 cut n1 Fair 16102 Good 49063 Very Good 120824 Premium 137915 Ideal 21551

> plot_ly(data_1, labels = ~cut, values = ~n) %>% add_pie()

四、Area Plot

> head(plotly::wind) r t nms1 77.5 North 11-14 m/s2 72.5 N-E 11-14 m/s3 70.0 East 11-14 m/s4 45.0 S-E 11-14 m/s5 22.5 South 11-14 m/s6 42.5 S-W 11-14 m/s

> plot_ly(plotly::wind, r = ~r, t = ~t) %>% add_area(color = ~nms)

References:

  1. Package 『plotly』
  2. Plotly | Make charts and dashboards online
  3. plotly v4.5.6 | RDocumentation
  4. R Graphing Library | Plotly
  5. A Brief Introduction to Plotly

推薦閱讀:

ggplot2雙坐標軸的解決方案
Quantmod Tutorial:數據獲取(一)
Learn R | SVM of Data Mining(二)
一個小案例,教你如何從數據抓取、數據清洗到數據可視化
索洛模型的R語言簡單實現

TAG:R编程语言 | 数据可视化 |