GPT手搓了一个:
library(dplyr)
library(echarts4r)
# 1) 整理数据(改成英文维度名,避免模板取值问题)
dat <- china_province_reshape2 %>%
mutate(
year = as.character(年份),
value = as.numeric(城镇化率),
region = 地区
) %>%
arrange(region, year) %>%
select(year, value, region)
years <- unique(dat$year)
regions <- unique(dat$region)
# 2) dataset:原始 + 按地区过滤后的视图(与官网同思路)
ds_raw <- list(
id = "dataset_raw",
dimensions = list("year", "value", "region"),
source = lapply(seq_len(nrow(dat)), function(i) {
list(dat$year[i], dat$value[i], dat$region[i])
})
)
ds_filters <- lapply(regions, function(r) {
list(
id = paste0("dataset_", r),
fromDatasetId = "dataset_raw",
transform = list(
type = "filter",
config = list(and = list(list(dimension = "region", `=` = r)))
)
)
})
# 3) 每个地区一条折线;endLabel 在线更新
series_list <- lapply(regions, function(r) {
list(
type = "line",
datasetId = paste0("dataset_", r),
name = r,
showSymbol = FALSE,
smooth = TRUE,
encode = list(
x = "year",
y = "value",
itemName = "year",
label = list("region", "value"),
tooltip = list("value")
),
endLabel = list(
show = TRUE,
# 模板法最稳:{@[1]} 就是 y 值
formatter = "{a}:{@[1]}",
valueAnimation = TRUE,
distance = 12
),
labelLayout = list(moveOverlap = "shiftY"),
emphasis = list(focus = "series")
)
})
# 4) 组装 option
e <- e_charts()
e$x$opts <- list(
animationDuration = 10000,
animationEasing = "linear",
dataset = c(list(ds_raw), ds_filters),
title = list(text = "各地区城镇化率(2014–2023)"),
tooltip = list(trigger = "axis", order = "valueDesc"),
legend = list(show = FALSE),
# grid = list(right = 160),
xAxis = list(type = "category", boundaryGap = FALSE, data = years),
yAxis = list(name = "城镇化率"),
series = series_list
)
e