ggplot中的散点图像barplot一样堆叠

时间:2015-12-08 20:19:12

标签: r ggplot2

我想在ggplot中创建一个散点图,其中每个x值都有多个y值。我想添加这些y值并将总和与x值进行对比。

>df
a b
1 2
1 2
2 1
2 4
3 1
3 5

我想要一个绘制每个a

的b值之和的图
a b
1 4
2 5
3 6

我可以通过制作堆积的条形图来为条形图做到这一点: ggplot(data=df, aes(x=df$a, y=df$b)) + geom_bar(stat="identity")

但如果我使用geom_point ggplot执行此操作,只需绘制y的每个值而不进行堆叠。

我可以使用ddply,但这需要更多步骤。如果有更方便的方式,我会很感激。

我在网站上搜索了其他答案。虽然有很多关于"堆积的散点图"他们都是关于重叠的情节。

2 个答案:

答案 0 :(得分:5)

我看不到有关条形图示例的任何内容。如果您只想将值汇总到单个pont,可以使用stat_summary

ggplot(data=df, aes(x=a, y=b)) + stat_summary(fun.y=sum, geom="point")

答案 1 :(得分:3)

有许多方法可以达到这种效果 - 直方图'但是没有条形,其高度是同一个X的所有值的总和。

这种类型的图形被称为克利夫兰点图,并且被使用是因为直方图的显着条纹可能会分散注意力,或者更糟糕的是误导。 (参见Cleveland,Tufte等的作品)。

实现此目的的一种方法是使用tablehisttapplyxtabs等功能预处理数据以进行求和。

请注意,基数R具有用于生成此类图形的函数dotchart

dotchart(xtabs(rev(df)))

enter image description here

...但是由于我们正在讨论ggplot,它有强大的方法来总结数据,同时绘制,让我们坚持使用MrFlick的主题如何直接ggplot运算符(即未预处理)。

使用加权bin概要统计:

ggplot(data=df, aes(x=factor(a),weight=b)) + geom_point(stat="bin")

enter image description here

您可能需要在此处将y下限调整为0.

通过堆叠点的高度:

ggplot(data=df, aes(x=factor(a),y=b)) + geom_point(position="stack")

enter image description here

此图中可见的附加点可能是多余的,并且绝对含糊不清,但突出了源数据中多重性的事实。

建立点图

这个在报纸上很受欢迎,但通常有美元钞票而不是巨大的黑洞:

ggplot(data = df,aes(x = factor(a),weight = b))+ geom_dotplot(method =" histodot")

enter image description here

它可能不是你想要的,但它值得注意。

您还应该注意,在此模式下难以正确调整音阶,因此在手动调谐模式下最好使用音阶,并关闭y音阶编号。