1

次のように R でバブル チャートを作成する簡単な方法はありますか。

ここに画像の説明を入力

私はggplot偽のデータをいじって、ここまで来ました:

cat<-c("A", "A", "B", "B", "C", "C")
chara<-c("1", "0", "1", "0", "1", "0")
percent<-c(80, 20, 60, 40, 90,10)
xcoord<-c(10,10,11,11,12,12)
ycoord<-c(10,10,10,10,10,10)

DF<-data.frame(cat,chara, percent, xcoord, ycoord)

NewBubbleChart <- ggplot(DF, aes(x = cat, y = "", size = percent, label = NULL, fill = chara), legend = FALSE) +
                    geom_point(color = "grey50", shape = 21, alpha = 0.99) +  
                   #geom_text(size=4) +
                    theme_bw() +
                    scale_size(range = c(5, 20))

NewBubbleChart <- NewBubbleChart +
                    scale_fill_manual(name = "Type",
                                      values = c("darkblue", "lightblue"),
                                      labels = c("0" = "Type 0", "1" = "Type 1"))

xcoord と ycoord の部分は結局使わずに残しました。棒グラフでも機能することはわかっていますが、代わりにバブル チャートが必要です。

4

2 に答える 2

4

これはかなり近づいているようです。

library(ggplot2)
# function to calculate coords of a circle
circle <- function(center,radius) {
  th <- seq(0,2*pi,len=200)
  data.frame(x=center[1]+radius*cos(th),y=center[2]+radius*sin(th))
}
# example dataset, similar to graphic
df <- data.frame(bank=paste("Bank",LETTERS[1:5]),start=1000*(5:1),end=500*(5:1))    
max <- max(df$start)
n.bubbles <- nrow(df)
scale <- 0.4/sum(sqrt(df$start))
# calculate scaled centers and radii of bubbles
radii <- scale*sqrt(df$start)
ctr.x <- cumsum(c(radii[1],head(radii,-1)+tail(radii,-1)+.01))
# starting (larger) bubbles
gg.1  <- do.call(rbind,lapply(1:n.bubbles,function(i)cbind(group=i,circle(c(ctr.x[i],radii[i]),radii[i]))))
text.1 <- data.frame(x=ctr.x,y=-0.05,label=paste(df$bank,df$start,sep="\n"))
# ending (smaller) bubbles
radii <- scale*sqrt(df$end)
gg.2  <- do.call(rbind,lapply(1:n.bubbles,function(i)cbind(group=i,circle(c(ctr.x[i],radii[i]),radii[i]))))
text.2 <- data.frame(x=ctr.x,y=2*radii+0.02,label=df$end)
# make the plot
ggplot()+
  geom_polygon(data=gg.1,aes(x,y,group=group),fill="dodgerblue")+
  geom_path(data=gg.1,aes(x,y,group=group),color="grey50")+
  geom_text(data=text.1,aes(x,y,label=label))+
  geom_polygon(data=gg.2,aes(x,y,group=group),fill="green2")+
  geom_path(data=gg.2,aes(x,y,group=group),color="grey50")+
  geom_text(data=text.2,aes(x,y,label=label), color="white")+
  labs(x="",y="")+scale_y_continuous(limits=c(-0.1,2.5*scale*sqrt(max(df$start))))+
  coord_fixed()+
  theme(axis.text=element_blank(),axis.ticks=element_blank(),panel.grid=element_blank())

つまり、これは「バブル中のバブル」チャートであり、2 つのイベントまたは時間 (グラフィックでは経済崩壊の前後) の間の指標 (グラフィックでは銀行の時価総額) の変化を表しています。これが機能するためには、終了条件が開始条件よりも小さくなければなりません (そうでない場合、「内側の」バブルは外側のバブルよりも大きくなります)。

コツは、円を下端に沿って整列させることです。これは を使用すると非常に難しいgeom_point(...)ため、代わりに泡に円を描くことにしました。

実際のケースでは、テキストの位置を手動で微調整する必要があると思います。複数の行が必要な場合 (図のように)、ggplot ファセットを検討できます。

最後に、円に影を付けたい場合 (たとえば、色のグラデーションを使用)、これは実際には ggplot が意図したものではありません。

于 2014-07-14T20:02:24.470 に答える
1

チャートをどのように表示したいかは正確にはわかりませんがgvisBubbleChart、パッケージで試してみることができますgoogleVis

library(googleVis)
##
DF <- cbind(
  DF,
  ID=paste0(DF$cat,DF$chara)
)
bChart <- gvisBubbleChart(
  data=DF,
  idvar="ID",
  xvar="xcoord",
  yvar="chara",
  colorvar="cat",
  sizevar="percent",
  options=list(vAxis='{minValue:.8, maxValue:3}')
)
plot(bChart)

ここに画像の説明を入力

于 2014-07-14T14:09:13.657 に答える