首页 文章

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

提问于
浏览
-1

我想在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 回答

  • 3

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

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

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

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

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

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

    dotchart(xtabs(rev(df)))
    

    enter image description here

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

    使用加权箱概要统计:

    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

    在这个图上可见的附加点可能是多余的,并且肯定是模糊的,但突出了源数据中多重性的事实 .

    构建一个dotplot

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

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

    enter image description here

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

    您还应该注意,在此模式下难以获得正确的刻度,因此最好在手动调整模式下使用,并关闭y刻度编号 .

相关问题