Упакованные диаграммы Bubble Pie в R?

Существуют ли какие-либо пакеты в R, которые могут помочь мне создавать упакованные пузырьковые диаграммы, в которых отдельные пузырьки действуют как круговые диаграммы?

Пример такой визуализации, реализованной в D3, упоминался здесь: http://bl.ocks.org/jsl6906/4a1b818b64847fb05d56


person Gabor Szalai    schedule 15.08.2016    source источник


Ответы (1)


Вы можете написать свою функцию:

pie_bubbles<-function(xpos,ypos,radii,sectors, 
                      sector_col=NULL,main="",xlab="",ylab="") { 
  xlim<-c(min(xpos-radii),max(xpos+radii)) 
  ylim<-c(min(ypos-radii),max(ypos+radii)) 
  nbubbles<-length(xpos) 
  if(is.null(sector_col)) { 
    sector_col<-list() 
    for(scol in 1:nbubbles) 
      sector_col[[scol]]<-rainbow(length(sectors[[scol]])) 
  } 
  plot(0,xlim=xlim,ylim=ylim,type="n", 
       main=main,xlab=xlab,ylab=ylab) 
  for(bubble in 1:nbubbles) 
    floating.pie(xpos=xpos[bubble],ypos=ypos[bubble], 
                 x=sectors[[bubble]],radius=radii[bubble], 
                 col=sector_col[[bubble]]) 
} 
# set the x positions 
xpos<-c(2,4,6,8,10) 
# and the y positions 
ypos<-c(4,8,6,10,2) 
# the radii are the "bubble" radii 
radii<-c(1,0.5,1.2,0.7,1.3) 
# these are the sector extents of the pies 
sectors<-list(1:4,c(5,3,8,6,2),c(3,2,1),c(3,7,5,8),c(2.5,3.7)) 
# get the plotrix package 
library(plotrix) 
pie_bubbles(xpos,ypos,radii,sectors,main="Pie bubbles")

введите здесь описание изображения

«Прикосновение к пузырям», как впоследствии упомянул ОП в комментарии:

ncircles <- 200
limits <- c(-50, 50)
inset <- diff(limits) / 3
rmax <- 20

xyr <- data.frame(
  x = runif(ncircles, min(limits) + inset, max(limits) - inset),
  y = runif(ncircles, min(limits) + inset, max(limits) - inset),
  r = rbeta(ncircles, 1, 10) * rmax)

library(packcircles)

res <- circleLayout(xyr, limits, limits, maxiter = 1000)
cat(res$niter, "iterations performed")

library(ggplot2)
library(gridExtra)
dat.after <- circlePlotData(res$layout)

doPlot <- function(dat, title)
  ggplot(dat) + 
  geom_polygon(aes(x, y, group=id), colour="brown", fill="burlywood", alpha=0.3) +
  coord_equal(xlim=limits, ylim=limits) +
  theme_bw() +
  theme(axis.text=element_blank(),
        axis.ticks=element_blank(),
        axis.title=element_blank()) +
  labs(title=title)

grid.arrange(
doPlot(dat.before, "before"),
  doPlot(dat.after, "after"),
  nrow=1)

введите здесь описание изображения

Вам придется добавить geom_segment, чтобы пузыри выглядели как пироги, хотя я уверен, что есть лучший способ, чем использование ggplot2

person Cyrus Mohammadian    schedule 16.08.2016
comment
Спасибо за это. Это, безусловно, хороший шаг, но я ищу решение, которое автоматически вычисляет положение пузырьков и размещает их таким образом, чтобы они соприкасались друг с другом (макет пакета, как указано выше в ссылке примера). Идея упакованных пузырьковых диаграмм заключается в том, что они просто представляют одну переменную измерения. Как в Tableau: interworks. com/blog/ccapitula/2015/01/06/ Я хотел бы выйти за рамки этого, чтобы упакованные пузырьки также представляли определенное измерение или категориальную переменную (скажем, факторную переменную в R). - person Gabor Szalai; 16.08.2016
comment
Спасибо @Cyrus, решение хорошо работает для макета, но я все еще не уверен, как продолжить использование geom_segment, чтобы пузыри выглядели как пироги, как вы предложили. - person Gabor Szalai; 16.08.2016
comment
это может помочь blog.rstudio.com/ 05.10.2018/ - person cephalopod; 17.03.2021