ggplot轴刻度落在bin值的中心而不是bin的限制

时间:2015-09-11 20:03:24

标签: r ggplot2 axis-labels binning

我有日期(x)和y(值)的数据(x,y)。我按值将y拆分为二进制数,并且每天为每个bin绘制一个点,该点的大小与当天每个bin中的值的数量成比例。每天现在有5个箱子,每个箱子中的值数量。垃圾箱看起来像:

组:值
鞋面:40-50 中上:30-40 中期:20-30 中下:10-20
较低:0-10

我想绘制y vs x,其中x轴是日期,y轴刻度是bins(每天将堆叠5个点,点的大小与该bin中的值的数量成比例那一天)。

我有R代码用于绘图,但 y轴标签刻度直接位于图表上的点旁边。但是,我希望滴答点落在点之间,以便这些点包含在bin限制内,而不是与该bin的单个平均值相关联。

代码是:

breaks = c(5, 15, 25, 35, 45, 55)
ggplot(df, aes(x = df$date, y = df$group, size = df$count)) +
    geom_point(aes(color = df$count), alpha = 0.8, show_guide = FALSE) +
    scale_x_date(breaks = "2 weeks", minor_breaks = "1 day", labels = date_format("%m-%d-%Y")) +  
    scale_y_discrete(name = "Value", labels=c(round(breaks))) 

我尝试了一些不同的方法来更改y轴刻度位置,包括更改scale_y_discrete中的标签和中断或将axis.ticks.y添加到theme(),但我似乎无法移动标签在图表上的点之间,即使标签显示正确的值。

谢谢,我感谢任何建议!

1 个答案:

答案 0 :(得分:3)

嗯,这是一种方式,但这有点像黑客。

# create sample dataset- you should provide this...
set.seed(1)    # for reproducible example
df <- data.frame(date  = rep(as.Date("2015-01-01")+0:4, each=5),
                 group = LETTERS[1:5],
                 count = rpois(5*5, lambda=10))

library(ggplot2)
n.lvls <- length(levels(df$group))
ggplot(df, aes(x=date, y=as.integer(group)-0.5))+
  geom_point(aes(size=count), shape=21, fill="lightgreen")+
  scale_y_continuous(limits=c(0,n.lvls+0.5),breaks=1:n.lvls, labels=levels(df$group), expand=c(0,0))

ggplot通过绘制因子代码(相当于as.integer(y))处理离散(分类)轴,然后用因子级别标记它们(因此,A - E在此例)。如果你想转移所有你可以显式转换为整数的东西,减去0.5,然后提供你自己的休息和水平。就像我说的,黑客......