我嘗試通過包含國旗來制作帶有 ggplot/ggimage 的氣泡圖。這是一個可重現的示例:
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)
除了下載圓形標志外,是否可以將標志轉換為圓形,或者是否可以將國家插入氣泡中。我嘗試了以下代碼,但它不起作用:
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)
我得到錯誤:
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
歡迎任何建議。
uj5u.com熱心網友回復:
這是一個為每個標志添加圓形掩碼的函式。如果我們從你的情節開始,
A_plot

我們獲取 url 并創建一些本地檔案名:
flags <- A_plot$data$CountryFlag
png_files <- sapply(strsplit(flags, "/"), function(x) x[length(x)])
現在我們創建一些帶有圓形蒙版的影像并將它們保存在本地:
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)
現在將這些檔案路徑寫為繪圖物件中的影像位置:
A_plot$data$CountryFlag <- png_files
Which changes our plot to:
A_plot

For completeness, we should tidy up after ourselves once the plot is drawn:
sapply(png_files, unlink)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/452358.html
上一篇:r中ggplot2的主題
