使用ggplot2表示散点图中每个点的小饼图

Ali*_*Ali 3 r scatter-plot ggplot2 pie-chart

我想创建一个散点图,其中每个点都是一个小饼图.例如,考虑以下数据:

foo <- data.frame(X=runif(30), Y=runif(30),A=runif(30),B=runif(30),C=runif(30))
Run Code Online (Sandbox Code Playgroud)

下面的代码将散点图,代表XY各点的值:

library(reshape2)
library(ggplot2)
foo.m <- melt(foo, id.vars=c("X","Y"))
ggplot(foo.m, aes(X,Y))+geom_point()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

以下代码将为每个点制作一个饼图:

p <- ggplot(foo.m, aes(variable,value,fill=variable)) + geom_bar(stat="identity")
p + coord_polar() + facet_wrap(~X+Y,,ncol=6) + theme_bw()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但我希望合并它们:创建一个散点图,其中每个点都被饼图替换.这样我就可以在同一个图表中显示每条记录的所有5个值(X,Y,A,B,C).

无论如何要做到这一点?

aos*_*ith 7

这是你可以用package ggsubplot做的事情.不幸的是,根据发行#10 在这里,这个包不与R 3.1.1工作.如果我使用旧版本的R(3.0.3),我成功运行它.

使用您的长数据集,您可以在每个点上添加条形图X,Y如下所示:

library(ggplot2)
library(ggsubplot)

ggplot(foo.m) +
    geom_subplot2d(aes(x = X, y = Y, 
                    subplot = geom_bar(aes(variable, value, fill = variable), stat = "identity")),
                width = rel(.5), ref = NULL)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这给出了基本的想法,尽管还有许多其他选项(比如在绘图空间中存在重叠时控制子图移动到的位置).

这个答案提供了有关更新R版本的ggsubplot状态的更多信息.