如何在R中的ggplot2中绘制堆积点直方图?

4 plot r ggplot2

什么是ggplot2相当于"dotplot"直方图?使用堆积点而不是条形图?与R中的此解决方案类似:

用点代替条形图直方图

是否可以在ggplot2中执行此操作?理想情况下,显示为堆栈的点和显示平滑线"适合"这些点的微弱线(这将形成直方图形状.)

Wal*_*cio 8

是的,ylim()点图(BTW,它可能会做你能想象到的所有情节,看看http://docs.ggplot2.org/current/index.html).基本上,你想要的是这个:

library(ggplot2)

set.seed(789); x <- data.frame(y = sample(1:20, 100, replace = TRUE))

ggplot(x, aes(y)) + geom_dotplot()
Run Code Online (Sandbox Code Playgroud)

为了使其行为像一个简单的dotplot,我们应该这样做:

ggplot(x, aes(y)) + geom_dotplot(binwidth=1, method='histodot')    
Run Code Online (Sandbox Code Playgroud)

你应该得到这个:

第一个情节

要解决密度问题,您必须添加另一个术语ggplot() + geom_dotplot() + ylim(),以便您的绘图调用将具有该表单ylim(0, A)

更具体地说,您将写入A,ylim()计算1.00密度所需的堆叠点数将在何处.在上面的示例中,您可以做的最好是看到7.5点达到0.50密度标记.从那里,你可以推断15点将达到1.00.

所以你的新电话看起来像这样:

ggplot(x, aes(y)) + geom_dotplot(binwidth=1, method='histodot') + ylim(0, 15)
Run Code Online (Sandbox Code Playgroud)

哪个会给你这个:

第二个情节

通常,这种眼球估计适用于点图,但当然您可以尝试其他值来微调您的比例.

请注意,更改ylim值不会影响数据的显示方式,只是更改y轴上的标签.

  • 您可以动态地编程“ A”,以便您不需要通过目视检查对其进行设置吗? (2认同)

dic*_*koa 6

正如@joran指出的那样,你可以使用geom_dotplot

require(ggplot2)
ggplot(mtcars, aes(x = mpg)) + geom_dotplot()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 你对标签"计数"是正确的,这是误导性的,因为这实际上是密度估计,你可以建议我们默认将这个标签改为"密度".dotplot的ggplot实现遵循Leland Wilkinson的原始实现,所以如果你想清楚地理解它是如何工作的,请看一下这篇论文http://www.cs.uic.edu/~wilkinson/Publications/dots.pdf (4认同)
  • 是否有一个简单的变换可以使y轴实际为计数,即“观察数”? (2认同)
  • 在帮助页面中写道:"当沿x轴进行装箱并沿y轴堆叠时,由于ggplot2的技术限制,y轴上的数字没有意义.您可以隐藏y轴,如其中一个示例,或手动缩放它以匹配点数.因此您可以使用此代码隐藏y轴`ggplot(mtcars,aes(x = mpg))+ geom_dotplot (binwidth = 1.5)+ + scale_y_continuous(name ="",breaks = NULL)` (2认同)