我有日期(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(),但我似乎无法移动标签在图表上的点之间,即使标签显示正确的值。
谢谢,我感谢任何建议!
答案 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,然后提供你自己的休息和水平。就像我说的,黑客......