首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >G图/ggimage中带有圆形国旗符号的气泡图

G图/ggimage中带有圆形国旗符号的气泡图
EN

Stack Overflow用户
提问于 2022-03-28 16:03:52
回答 1查看 305关注 0票数 1

我试图通过包含国家国旗来制作一个带有ggplot/ggimage的气泡图。下面是一个可重复的例子:

代码语言:javascript
复制
library(dplyr)
library(ggplot)
library(ggimage)

A <- data.frame(X = c(1,4,5), Y = c(10, 1, 5), Z = c(1, 2, 3)/30, Country = c("FR", "BE", "IT"), CountryFlag = paste0("https://flagcdn.com/h20/", str_to_lower(Country), ".png"))

A_plot <- ggplot(A, mapping = aes(x = X, y = Y, size = I(Z), image = CountryFlag)) +
          geom_image()

X11(); print(A_plot)

除了下载四舍五入的标志外,是可以将国旗转换为圆形,还是可以将国家插入泡泡中。我尝试了以下代码,但它不起作用:

代码语言:javascript
复制
library(dplyr)
library(ggplot)
library(ggimage)

A <- data.frame(X = c(1,4,5), Y = c(10, 1, 5), Z = c(1, 2, 3), Country = c("FR", "BE", "IT"), CountryFlag = paste0("https://flagcdn.com/h20/", str_to_lower(Country), ".png"))

A_plot <- ggplot(A, mapping = aes(x = X, y = Y, size = Z, image = CountryFlag)) +
          geom_point(alpha = 0.5, col = "lightblue") +
          geom_image()

X11(); print(A_plot)

我知道错误:

代码语言:javascript
复制
Error in `[<-`(`*tmp*`, !is.na(alpha), 4, value = alpha[!is.na(alpha)]) : 
  (subscript) logical subscript too long
In addition: Warning message:
In rep(colour, length.out = length(alpha)) :
  'x' is NULL so the result will be NULL

任何建议都是欢迎的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-28 16:58:48

下面是一个函数,它为每个标志添加了一个循环掩码。如果我们从你的阴谋开始,

代码语言:javascript
复制
A_plot

我们获取urls并创建一些本地文件名:

代码语言:javascript
复制
flags <- A_plot$data$CountryFlag
png_files <- sapply(strsplit(flags, "/"), function(x) x[length(x)])

现在,我们使用循环掩码创建一些图像,并在本地保存它们:

代码语言:javascript
复制
OK <- Map(function(flag, png) {
  im <- magick::image_read(flag)
  im <- magick::image_resize(im, magick::geometry_size_percent(500, 2000))
  ii <- magick::image_info(im)
  width <- ii$width
  fig <- magick::image_draw(magick::image_blank(height, height))
  symbols(width/2, width/2, circles=(width/2), bg='black', inches=FALSE, add=TRUE)
  im2 <- magick::image_composite(im, fig, operator='copyopacity')
  magick::image_write(im2, png)
}, flag = flags, png = png_files)

现在,将这些文件路径写入绘图对象中的图像位置:

代码语言:javascript
复制
A_plot$data$CountryFlag <- png_files

这将我们的图谋改变为:

代码语言:javascript
复制
A_plot

为了完整起见,一旦画出了情节,我们就应该自己整理:

代码语言:javascript
复制
sapply(png_files, unlink)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71650342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档