地图可视化(五):可交互柱状图

R
plotly
echarts4r
Author

Rui

Published

April 7, 2023

一些数据处理

读取数据:

Code
library(tidyverse)

data <- read.csv("data/地址经纬度数据.csv", encoding = 'UTF-8')
data <- data %>%
  filter(!is.na(longitude), !is.na(latitude))

由于企业/机构种类繁多,这里只选取频数最多的前 4 种类型:

Code
top4 <- data %>%
  group_by(company_type) %>% 
  summarise(freq = n()) %>%
  arrange(desc(freq)) %>%
  slice(1:4) %>%
  select(company_type)

top4 <- top4$company_type

print(top4)
## [1] "省科技型中小企业"             "高企"                        
## [3] "市级企业研究开发中心"         "省级高新技术企业研究开发中心"

过滤数据:

Code
data <- data %>%
  filter(company_type %in% top4)

data %>% head() %>% knitr::kable()
company_type name clean_address longitude latitude
省级高新技术企业研究开发中心 新昌药业省级高新技术企业研究开发中心 绍兴滨海新城致远中大道168号 120.8196 30.18395
省级高新技术企业研究开发中心 喜临门床具省高新技术企业研究开发中心 绍兴袍江群贤东路20号 120.6050 30.06792
省级高新技术企业研究开发中心 振德医用敷料省高新技术企业研究开发中心 绍兴市越城区皋埠镇皋北工业区 120.6658 30.01624
省级高新技术企业研究开发中心 古纤道新材料省高新技术企业研究开发中心 浙江省绍兴市越城区斗门街道望海路18号 120.6315 30.11049
省级高新技术企业研究开发中心 古纤道高新纤维材料省级高新技术企业研究开发中心 浙江省绍兴市越城区斗门街道望海路18号 120.6315 30.11049
省级高新技术企业研究开发中心 绍兴软钎焊技术研究开发中心 绍兴市越城区东湖镇五联工业园区 120.6353 30.00826

使用 plotly 绘制可交互柱状图

计算频数,除了使用 group_up 还可以使用 table

Code
counts <- table(data$company_type)
counts
## 
##                         高企 省级高新技术企业研究开发中心 
##                          529                          113 
##             省科技型中小企业         市级企业研究开发中心 
##                         1590                          114
Code
library(plotly)

plot_ly(x = names(counts), y = counts, type = "bar") %>% 
      layout(
        title = "企业/机构类型",
        xaxis = list(title = "", tickangle = -90), # x轴标签旋转90度
        yaxis = list(title = "数量")
      )

从高到低排列:

Code
counts <- counts %>%
  as.data.frame() %>%
  mutate(Var1 = as.factor(Var1))

library(forcats)
counts$Var1 <- fct_reorder(counts$Var1, counts$Freq, .desc = TRUE)
Code
plot_ly(data = counts, x = ~Var1, y = ~Freq, type = "bar") %>% 
      layout(
        title = "企业/机构类型",
        xaxis = list(title = "", tickangle = -90), # x轴标签旋转90度
        yaxis = list(title = "数量")
      )

使用 echarts4r 绘制可交互柱状图

Code
df <- data.frame(counts) %>% rename("type" = "Var1", "num" = "Freq")
df %>% knitr::kable()
type num
高企 529
省级高新技术企业研究开发中心 113
省科技型中小企业 1590
市级企业研究开发中心 114
Code
library(echarts4r)

df %>%
e_charts(type) %>% # 横轴
  e_bar(num) %>% # 纵轴
  e_x_axis(
    axisLabel = list(interval = 0, rotate = 15), # x 轴刻度旋转90度
    name = "", # 坐标轴标题
    nameLocation = "center", # 横坐标轴标题的位置
    nameGap = 30
  ) %>% # 坐标轴标题与坐标轴之间的距离
  e_y_axis(
    interval = 200, # 显示间隔
    name = "数量", # 坐标轴名称
    formatter = "{value} 家"
  ) %>% # 坐标轴标签的格式化文本
  e_legend(formatter = "企业/机构数量") %>% # 设置图例
  e_labels(formatter = "{@[1]}家")

一点点修改:

Code
df %>%
e_charts(type) %>% # 横轴
  e_bar(num) %>% # 纵轴
  e_x_axis(
    axisLabel = list(interval = 0, rotate = 15), # x 轴刻度旋转90度
    name = "", # 坐标轴标题
    nameLocation = "center", # 横坐标轴标题的位置
    nameGap = 30
  ) %>% # 坐标轴标题与坐标轴之间的距离
  e_y_axis(
    interval = 250, # 显示间隔
    name = "数量", # 坐标轴名称
  ) %>% 
  e_legend(formatter = "企业/机构数量") %>% # 设置图例
  e_labels(formatter = "{@[1]}家")