Biểu đồ tương tác với plotly

Xây dựng Dashboard với shinydashboard

Png Kee Seng

Researcher

Ví dụ: Danh sách Airbnb ở London

  • Giả sử chúng ta làm tại một công ty du lịch ở London
  • Có hợp tác với Airbnb
    library(tidyverse)
    listings <- read_csv("../data/listings.csv")
    
...
 $ host_name                     : chr [1:69351] "Susie" "Alina" "Luca" "Simon" ...
 $ neighbourhood_group           : logi [1:69351] NA NA NA NA NA NA ...
 $ neighbourhood                 : chr [1:69351] "Tower Hamlets" "Islington" "Tower Hamlets" "Islington" ...
 $ latitude                      : num [1:69351] 51.5 51.6 51.5 51.5 51.5 ...
 $ longitude                     : num [1:69351] -0.054 -0.1127 -0.0743 -0.1048 -0.2 ...
 $ room_type                     : chr [1:69351] "Private room" "Private room" "Entire home/apt" "Private room" ...
 $ price                         : num [1:69351] 55 50 90 180 297 75 204 379 90 30 ...
 $ minimum_nights                : num [1:69351] 3 1 5 4 14 3 2 4 3 7 ...
 $ number_of_reviews             : num [1:69351] 65 30 42 493 6 89 581 51 104 32 ...
 $ last_review                   : Date[1:69351], format: "2016-06-10" "2022-07-15" "2022-01-04" "2022-09-02" ...
 $ reviews_per_month             : num [1:69351] 0.47 0.2 0.34 3.59 0.05 0.57 4.26 0.36 0.86 0.29 ...
 $ calculated_host_listings_count: num [1:69351] 1 2 1 5 1 1 1 5 1 1 ...
 $ availability_365              : num [1:69351] 74 343 222 236 180 70 193 249 318 251 ...
...
Xây dựng Dashboard với shinydashboard

Bắt đầu với plotly

  • Nạp thư viện plotly

    library(plotly)
    
  • Đặt đối tượng ggplot vào ggplotly() để tạo đối tượng plotly

    ggplotly(<ggplot object>)
    
Xây dựng Dashboard với shinydashboard

Biểu đồ bong bóng với ggplot

  • Tạo biểu đồ bong bóng và lưu là bubble
    • Thể hiện quan hệ giữa price trung bình và availability_365
    • Mỗi room_type một màu bong bóng
    • Kích thước bong bóng tỷ lệ số lượng danh sách
    • Thêm lớp để làm đẹp
bubble <- listings %>%

group_by(room_type, neighbourhood) %>% summarise(avg_price = mean(price, na.rm=TRUE), avg_availability = mean(availability_365, na.rm=TRUE),
Count = n(), .groups = "drop") %>%
ggplot(aes(x = avg_price, y = avg_availability,
color = room_type,
size = Count)) +
geom_point() +
labs(x = "Average price", y = "Average availability", color = "Room type") + theme_classic()
Xây dựng Dashboard với shinydashboard

Biểu đồ bong bóng với ggplot, đã vẽ

Biểu đồ bong bóng thông thường tạo bằng ggplot.

Xây dựng Dashboard với shinydashboard

Biểu đồ bong bóng tương tác với plotly

  • Bao bubble trong ggplotly()
ggplotly(bubble)

Biểu đồ bong bóng plotly tương tác.

Xây dựng Dashboard với shinydashboard

Boxplot ngang với plotly

  • Một số biểu đồ không chuyển đổi đúng

  • Tạo loạt boxplot nằm ngang

    • Mô tả phân phối availability_365 theo room_type
  • Chuyển bằng ggplotly() không hoạt động
boxH <- listings %>%

ggplot(aes(x = availability_365, y=room_type)) +
geom_boxplot() +
labs(x="Availbility (out of 365 days)", y="Room type") + theme_classic()
ggplotly(boxH)

Boxplot nằm ngang tạo bằng ggplot.

Boxplot nằm ngang sau khi chuyển bằng ggplotly.

Xây dựng Dashboard với shinydashboard

Boxplot dọc với plotly

  • Hoán đổi xy trong aes()
  • Giờ chuyển đổi plotly sẽ hoạt động
boxV <- listings %>%

ggplot(aes(y = availability_365, x=room_type)) + geom_boxplot() + labs(y="Availbility (out of 365 days)", x="Room type") + theme_classic()
ggplotly(boxV)

Boxplot dọc với ggplot.

Boxplot dọc với ggplotly.

Xây dựng Dashboard với shinydashboard

Sửa boxplot ngang với plotly

  • Nếu muốn boxplot ngang thì sao?
    • Thêm coord_flip()
  • Cũng có thể dùng facet_wrap()
    • Mỗi ô phải đủ lớn
ggplotly(boxV + coord_flip())
ggplotly(boxV + coord_flip() + 
    facet_wrap(~neighbourhood))

Boxplot plotly sau khi lật trục.

Boxplot plotly có phân mảnh (facet).

Xây dựng Dashboard với shinydashboard

Ayo berlatih!

Xây dựng Dashboard với shinydashboard

Preparing Video For Download...