我想在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,但这需要更多步骤。如果有更方便的方式,我会很感激。
我在网站上搜索了其他答案。虽然有很多关于"堆积的散点图"他们都是关于重叠的情节。
答案 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等的作品)。
实现此目的的一种方法是使用table
或hist
或tapply
或xtabs
等功能预处理数据以进行求和。
请注意,基数R具有用于生成此类图形的函数dotchart
。
dotchart(xtabs(rev(df)))
...但是由于我们正在讨论ggplot
,它有强大的方法来总结数据,同时绘制,让我们坚持使用MrFlick的主题如何直接ggplot运算符(即未预处理)。
ggplot(data=df, aes(x=factor(a),weight=b)) + geom_point(stat="bin")
您可能需要在此处将y下限调整为0.
ggplot(data=df, aes(x=factor(a),y=b)) + geom_point(position="stack")
此图中可见的附加点可能是多余的,并且绝对含糊不清,但突出了源数据中多重性的事实。
这个在报纸上很受欢迎,但通常有美元钞票而不是巨大的黑洞:
ggplot(data = df,aes(x = factor(a),weight = b))+ geom_dotplot(method =" histodot")
它可能不是你想要的,但它值得注意。
您还应该注意,在此模式下难以正确调整音阶,因此在手动调谐模式下最好使用音阶,并关闭y音阶编号。