Code
library(tidyverse)
<- read.csv("data/地址经纬度数据.csv", encoding = 'UTF-8')
data <- data %>%
data filter(!is.na(longitude), !is.na(latitude))
Rui
April 7, 2023
读取数据:
由于企业/机构种类繁多,这里只选取频数最多的前 4 种类型:
过滤数据:
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
:
从高到低排列:
echarts4r
绘制可交互柱状图type | num |
---|---|
高企 | 529 |
省级高新技术企业研究开发中心 | 113 |
省科技型中小企业 | 1590 |
市级企业研究开发中心 | 114 |
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]}家")
一点点修改:
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]}家")
---
title: "地图可视化(五):可交互柱状图"
author: "Rui"
date: "2023-04-07"
categories: [R, plotly, echarts4r]
image: "ice.jpg"
format:
html:
code-fold: true
code-tools: true
---
```{r setup, include = FALSE}
# 设置默认参数
knitr::opts_chunk$set(
echo = TRUE,
fig.align = "center",
message = FALSE,
warning = FALSE,
collapse = TRUE
)
```
![](ice.jpg)
## 一些数据处理
读取数据:
```{r}
library(tidyverse)
data <- read.csv("data/地址经纬度数据.csv", encoding = 'UTF-8')
data <- data %>%
filter(!is.na(longitude), !is.na(latitude))
```
由于企业/机构种类繁多,这里只选取频数最多的前 4 种类型:
```{r}
top4 <- data %>%
group_by(company_type) %>%
summarise(freq = n()) %>%
arrange(desc(freq)) %>%
slice(1:4) %>%
select(company_type)
top4 <- top4$company_type
print(top4)
```
过滤数据:
```{r}
data <- data %>%
filter(company_type %in% top4)
data %>% head() %>% knitr::kable()
```
## 使用 `plotly` 绘制可交互柱状图
计算频数,除了使用 `group_up` 还可以使用 `table`:
```{r}
counts <- table(data$company_type)
counts
```
```{r}
library(plotly)
plot_ly(x = names(counts), y = counts, type = "bar") %>%
layout(
title = "企业/机构类型",
xaxis = list(title = "", tickangle = -90), # x轴标签旋转90度
yaxis = list(title = "数量")
)
```
从高到低排列:
```{r}
counts <- counts %>%
as.data.frame() %>%
mutate(Var1 = as.factor(Var1))
library(forcats)
counts$Var1 <- fct_reorder(counts$Var1, counts$Freq, .desc = TRUE)
```
```{r}
plot_ly(data = counts, x = ~Var1, y = ~Freq, type = "bar") %>%
layout(
title = "企业/机构类型",
xaxis = list(title = "", tickangle = -90), # x轴标签旋转90度
yaxis = list(title = "数量")
)
```
## 使用 `echarts4r` 绘制可交互柱状图
```{r}
df <- data.frame(counts) %>% rename("type" = "Var1", "num" = "Freq")
df %>% knitr::kable()
```
```{r}
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]}家")
```
一点点修改:
```{r}
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]}家")
```