在双轴图表上重新标记一个轴

标签 r

我有一张图表,显示了 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))

期望的最终结果: enter image description here

最佳答案

您可以使用标记器函数来标记主轴,该函数会查找第 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))

enter image description here

关于在双轴图表上重新标记一个轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65351895/

相关文章:

r - 如何在 zelig 中获取多重插补数据的模型拟合度(AIC、F 统计量)度量?

r - 在 R 中向量化二维函数

r - 如何运行线性模型,并更有效地使用预测函数?

r - 在因子 : GAM 内添加两个随机效应

r - 为数据框选择多个奇数或偶数列/行

r - 如何指示Roxygen2中的整理顺序?

r - by() 在数据帧上应用均值函数时出错。发生了什么?

r - 如何从 Sys.info() 中提取用户名?

r - 如何使用 parRF 方法使随机森林运行得更快

r - 如何查找 data.frame 行子集中的所有元素是否为 TRUE