ggplot 轴刻度落在 bin 值的中心而不是 bin 限制
ggplot axis ticks fall at center of bin value rather than at the bin limits
我有日期 (x) 和 y(值)的数据 (x,y)。我按值将 y 分成多个箱子,并在每天为每个箱子绘制一个点,点的大小与当天落入每个箱子的值的数量成正比。现在每天都有 5 个箱子,每个箱子中的值数都有一个计数。垃圾箱看起来像:
组: 值
上限: 40-50
中上:30-40
中: 20-30
中下:10-20
较低: 0-10
我想绘制 y vs x,其中 x 轴是日期,y 轴刻度是箱子(每天将堆叠 5 个点,点的大小与值的数量成正比那天的垃圾箱)。
我有用于绘图的 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(),但我似乎无法让标签在图表上的点之间移动,即使标签显示正确的值也是如此。
谢谢,我很感激任何建议!
好吧,这是一种方法,但有点麻烦。
# 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,然后提供你自己的间隔和水平。就像我说的,黑客...
我有日期 (x) 和 y(值)的数据 (x,y)。我按值将 y 分成多个箱子,并在每天为每个箱子绘制一个点,点的大小与当天落入每个箱子的值的数量成正比。现在每天都有 5 个箱子,每个箱子中的值数都有一个计数。垃圾箱看起来像:
组: 值
上限: 40-50
中上:30-40
中: 20-30
中下:10-20
较低: 0-10
我想绘制 y vs x,其中 x 轴是日期,y 轴刻度是箱子(每天将堆叠 5 个点,点的大小与值的数量成正比那天的垃圾箱)。
我有用于绘图的 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(),但我似乎无法让标签在图表上的点之间移动,即使标签显示正确的值也是如此。
谢谢,我很感激任何建议!
好吧,这是一种方法,但有点麻烦。
# 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,然后提供你自己的间隔和水平。就像我说的,黑客...