我想使用ggplot来实现以下情节类型:
使用以下数据:
t <- read.table(header=T, row.names=NULL,
colClasses=c(rep("factor",3),"numeric"), text=
"week team level n.persons
1 A 1 50
1 A 2 20
1 A 3 30
1 B 1 50
1 B 2 20
2 A 2 20
2 A 3 40
2 A 4 20
2 B 3 30
2 B 4 20")
到目前为止,通过应用此转换
t0 <- t[ rep(1:nrow(t), t$n.persons %/% 10 ) , ]
并密谋
ggplot(t0) + aes(x=week, y=level, fill=team) +
geom_dotplot(binaxis="y", stackdir="center",
position=position_dodge(width=0.2)
我可以生成
A:如何让不同球队的球队垂直躲避并且不重叠?
B:整个点包装是否总是居中,即 如果一个地方只有一个团队的小点,就不会发生躲闪吗?
答案 0 :(得分:2)
以下代码停止重叠:
t0 <- t[ rep(1:nrow(t), t$n.persons %/% 10 ) , ]
t0$level <- as.numeric(t0$level) # This changes the x-axis to numerics
t0$level <- ifelse(t0$team == "B", (t0$level+.1), t0$level) # This adds .1 to the position on the x-axis if the team is 'B'
ggplot(t0) + aes(x=week, y=level, fill=team) + geom_dotplot(binaxis="y", stackdir="center",
position=position_dodge(width=0.2))
这是输出:
如果您愿意,也可以减去一个向下移动点的值。
如果您希望线条恰好在点之间,则此代码应该执行此操作:
t0$level <- ifelse(t0$team == "B", (t0$level+.06), t0$level)
t0$level <- ifelse(t0$team == "A", (t0$level-.06), t0$level)
输出:
我不确定如何在给定坐标只有一个团队的情况下跳过上面的ifelse
。我想象你需要在每个坐标上计算一组独特的团队标签,并且只有当这个数量是&gt; 1然后运行上面的代码。