我有一张图表,显示了 2 圈比赛中从起始位置到结束位置的单圈位置进展情况。
我想修改图表,将车手的名字放在左侧 y 轴上,与他们的起始位置对齐(即从上到下,名字将是比尔,谁先开始,玛丽亚,谁第二个开始) ,以及第三名出发的克劳迪奥),他们的最终位置编号将在右侧(从上到下,第一到第三)
我已经研究这个问题有一段时间了,但无法弄清楚。另外,如图所示,我希望图表从顶部的 1 变为底部的 3,但由于某种原因我无法摆脱负数。非常感谢任何可以提供帮助的人:
## reprex
library(ggplot2)
library(scales)
dat <- data.frame(name = c(rep("bill", 3), rep("maria", 3), rep("claudio", 3)),
lap = rep(0:2, 3),
pos = c(1, 1, 2,
2, 3, 1,
3, 2, 3))
dat %>%
ggplot(aes(x = lap, y = -pos, color = name)) +
geom_line() +
scale_y_continuous(breaks = pretty_breaks(3),
sec.axis = dup_axis()) +
scale_x_continuous(breaks = pretty_breaks(3))
最佳答案
您可以使用标记器函数来标记主轴,该函数会查找第 0 圈每个位置上的驱动器,并添加 sec_axis
而不是 dup_axis
。
您还可以使用 scale_y_reverse
而不是使用 -pos
来正确排序轴:
dat %>%
ggplot(aes(x = lap, y = pos, color = name)) +
geom_line() +
scale_y_reverse(breaks = 1:3,
labels = function(x) {
dat$name[dat$lap == 0][order(dat$pos[dat$lap == 0])][x]
},
sec.axis = sec_axis(function(x) x,
breaks = 1:3, labels = label_ordinal())) +
scale_x_continuous(breaks = pretty_breaks(3))
关于在双轴图表上重新标记一个轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65351895/