推荐一篇文章:https://cosx.org/2021/12/introduction-to-echarts4r/#ref-blogdown2017
袁凡将 echarts4r 做了全面细致的介绍,文中所有图、表代码都由 R Markdown 一键编译生成,有大量交互式的内容,还包含动画,文章篇幅较长,具体操作讲的很细致,是入坑交互式统计图形非常好的材料。
文章推荐:echarts4r: 从入门到应用【袁凡】
大家好,不知道有没有人有兴趣学完入门内容后,填补一下从入门到实战的 Gap。比如苏玮 @InfinityLoop 开发的新型冠状病毒疫情速报 里包含的地图要复杂得多,数据也有故事背景。希望有一篇有故事、有数据、有技术、有观点的文章。
@yuanfan 有没有兴趣再来一篇?
- 已编辑
yuanfan R 及 R 包内置的数据集就有很多,比如美国人口普查统计数据是 R 内置的数据集 state.x77,不过需要进一步挖一挖,美国也有人口普查以及发布数据的官网,有人封装了一些数据接口,比如 tidycensus,还有人进一步做了些可视化Creating beautiful demographic maps in R with the tidycensus and tmap packages
加州大学尔湾分校整理机器学习数据仓库
UC Irvine Machine Learning Repository
https://archive-beta.ics.uci.edu/
英国数百个空气污染质量检测站的数据
https://github.com/davidcarslaw/openair
国际房价和繁荣数据
https://github.com/kvasilopoulos/ihpdr
做一些技术学习和数据分析,网络上有很多数据,比如这个公开数据列表
https://github.com/awesomedata/awesome-public-datasets
应该能找到和专业、工作或者感兴趣的领域数据。对了,还有 Kaggle 也是一个很大的数据源
https://www.kaggle.com/
@yuanfan 想在地图上的某个坐标点上添加一段文字描述要怎么实现呢?
这是根据 R 内置的数据集 quakes 绘制的散点图
library(echarts4r)
quakes |>
e_charts(x = long) |>
e_geo(
roam = TRUE,
map = "world",
boundingCoords = list(
c(165.67, -38.59),
c(188.13, -10.72)
)
) |>
e_scatter(
serie = lat,
scale = NULL,
size = mag, name = "地震点",
coord_system = "geo"
)
想在图上某个点旁边注上说明,这个点不在数据集 quakes 内,刚 Google 了一下,这次汤加火山爆发地点貌似是 c(-21.0744343,-176.2500947)
,这种有办法实现吗?
Cloud2016
我没琢磨出来比较好的,只是给那个点增加了提示,需要把鼠标放到那个点上才可以看到提示的内容:
library(echarts4r)
data("quakes")
row <- c(-21.0744343, -176.2500947, 500, 5, 50)
quakes <- rbind(quakes, row) #把这个点加到数据集里面
quakes$label <- ' '
quakes[which(quakes$lat == -21.0744343 &
quakes$long == -176.2500947), ]$label <- '某个点旁边注上的说明'
quakes |>
e_charts(x = long) |>
e_geo(roam = TRUE,
map = "world",
boundingCoords = list(c(165.67,-38.59),
c(188.13,-10.72))) |>
e_scatter(
serie = lat,
scale = NULL,
size = mag,
bind = label, #params.name
name = "地震点",
coord_system = "geo"
)|>
e_tooltip(
padding = 5,
borderWidth = 1,
trigger = "item",
formatter = htmlwidgets::JS("function(params){
return( params.name )}")
)
那个,我想吐槽下你给的那个点的坐标位置也太特殊了,我刚开始把地图缩小了没找到,还是加了数据标签的引导线才顺着线找到的。
看其他小伙伴们有没有什么好的思路。
- 已编辑
Cloud2016
不用 tooltip,改成增加 label 也行,如下:
quakes |>
e_charts(x = long) |>
e_geo(roam = TRUE,
map = "world",
boundingCoords = list(c(165.67,-38.59),
c(188.13,-10.72))) |>
e_scatter(
serie = lat,
scale = NULL,
size = mag,
bind = label, #params.name
name = "地震点",
coord_system = "geo"
)|>
e_labels(
position = 'top',
formatter = htmlwidgets::JS("function(params){
return( params.name )}")
)
- 已编辑
yuanfan 这个事看起来还挺复杂的,理想态是类似 ggplot2 的标签图层,或者 ggrepel 那样,可以另起一个数据,添加文本注释图层。
set.seed(2020)
library(ggplot2)
library(ggrepel)
dat <- data.frame(
x = seq(100),
y = cumsum(rnorm(100))
)
anno_data <- dat |>
subset(x %% 25 == 10) |>
transform(text = "text")
ggplot(data = dat, aes(x, y)) +
geom_line() +
geom_label_repel(aes(label = text), # 有另一份数据,新加一个图层
data = anno_data,
direction = "y",
nudge_y = c(-5, 5, 5, 5)
) +
theme_minimal()
P.S. 汤加火山位置我应该给 c(-21.0744, 183.7499)
毕竟西经 176 就是东经 184, 这样就和 quakes 数据集保持一样了。
- 已编辑
# 从本地加载新的正确的中国地图数据
> china_map <- jsonlite::read_json("中华人民共和国.json")
> china_map <- jsonlite::read_json("https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json")
> # 开始绘图
> df |>
+ e_charts(region) |>
+ # 注册地图
+ e_map_register("China2", china_map) |>
+ # 调用注册的地图
+ em_map("China2") |>
+ # 将数据映射到地图上
+ e_map(value, map = "China2") |>
+ e_visual_map(value)
Error in readBin(3L, raw(0), 32768L) :
can only read from a binary connection
报错怎么办?
文章很好,不过我有一个问题:中国地图关于九段线及南海诸岛放置的问题。一般在画中国地图的时候往往会把九段线和南海诸岛绘制一张缩略图放在右下角,但是用高德地图数据的时候,不能直接做到这一点,不知道有没有其他方法?
curiosity 效果不太好,目前尚未找到比较好,另外,自己加工的可能不合规,之前我们有讨论过这个问题,见 https://d.cosx.org/d/422867 和 https://github.com/cosname/cosx.org/pull/1004
yuanfan 牛逼啊,好多书还没来得及看额
请问echarts4r自带的图片下载功能,可以设置高分辨率的下载吗?