点图动态控制ylim

时间:2015-09-01 18:27:42

标签: r

我想做一个点图并在y轴上显示计数而不是明确的并且让ylim()动态调整

library(ggplot2)
d = data.frame( x = c(-.5,-.06,-.051,-.049,-.03,.02), color = c("red", "red", "red","green", "red","blue"))
set.seed(1)
#d= data.frame(x = rnorm(10))
binwidth= .025
p=ggplot(d, aes(x = x)) + geom_dotplot(binwidth = binwidth, method="histodot") +  coord_fixed(ratio=binwidth) 
p +  ylim(0, ceiling(max(table(cut(p$data$x, (diff(range(p$data$x))/binwidth)))))*1.2)

有没有办法应用数据框“颜色”列中的着色?

当您更改binwidth变量时,绘图的大小也会更改。将binwidth变量更改为.1,您将看到绘图变大。有没有办法让情节大小相同?

谢谢

1 个答案:

答案 0 :(得分:1)

我们可以用

确定这个数字
p = ggplot(d, aes(x = x)) + geom_dotplot(binwidth = .05, method="histodot") + coord_fixed(ratio=0.05)

p + ylim(0, ceiling(max(table(cut(p$data$x, (diff(range(p$data$x))/0.05)))))*1.2)

查找值的范围

diff(range(p$data$x))

除以binwidth或coord_fixed比率以查找切割次数

diff(range(p$data$x))/p$coordinates$ratio

根据上面确定的削减数量将每个数字分配到一个bin中

cut(p$data$x, diff(range(p$data$x))/p$coordinates$ratio)

找到具有最大观察数的bin。这个数字可能与情节不完全匹配,但这应该不是问题。

ceiling(max(table(cut(p$data$x, (diff(range(p$data$x))/0.05)))))*1.2