r - ggplot2 , ggroc 改变轴刻度
问题描述
我一直在尝试用 scale_x_discrete 连续改变我的轴刻度,但似乎没有人工作,我要么得到一个错误,要么他们只是不改变。我也在寻找一种方法来“移动”我的两个轴,以便我的情节看起来像提供的示例。
library(ggplot2)
library(pROC)
library(dplyr)
#some data
data(aSAH)
# store roc object
roc.ob <- roc(outcome ~ s100b, aSAH, percent = T)
ggroc(roc.ob) +
coord_fixed()+
geom_abline(slope = 1 ,intercept = 100) + # add identity line
theme(
panel.background = element_blank(),
axis.title.x = element_text(size =18, face = 'bold'),
axis.title.y = element_text(size =18, face = 'bold'),
panel.border = element_rect(size = 2, fill = NA),
axis.text.x = element_text(size = 14, face ='bold'),
axis.text.y = element_text(size = 14, face ='bold')) +
xlab('100% - Specificity') +
ylab('100% - Sensitivity')
我懂了:
但是我需要随意更改我的轴,以便它们处于概率(100 -> 1、50 -> .5 等),并且我的 X 轴是倒置的,所以 100 -> 0 和 0 -> 100。我给出一个例如,我知道我可以更改我的轴标题,因此它在技术上是正确的,但我想知道我是否可以更改它们。如果我可以在图框的每一边加上刻度,那就太好了:D。¿我怎么能改变我的轴?
解决方案
是的,你绝对可以改变你的轴。它可能会发出警告,因为该ggroc()
函数已经反转了 x 轴,但这不是问题。
大多数调整都发生在音阶中,有几点:
labels
如果基础数据在百分比空间而不是概率空间中,您可以通过为参数提供自定义函数来更改标签- 您可以添加带有标识转换的辅助轴,
~ .x
以使刻度线出现在顶部和右侧。 - 您可以将 expand 设置为
c(0,0)
在轴周围没有任何空白填充。我看到你的例子没有它,所以我复制了它。 - 最后,在主题中,您可以将辅助轴的轴刻度长度设置为负单位,以使刻度指向内部,就像您给出的示例一样。
我没有包括所有不必要的主题设置来证明这一点。
ggroc(roc.ob) +
coord_fixed()+
geom_abline(slope = 1 ,intercept = 100) + # add identity line
scale_x_continuous(trans = "reverse", name = "100% - Specificity",
labels = function(x){format(x/100)},
sec.axis = sec_axis(~ .x, labels = NULL),
expand = c(0,0)) +
scale_y_continuous(name = "100% - Sensitivity",
labels = function(x){format(x/100)},
sec.axis = sec_axis(~ .x, label = NULL),
expand = c(0,0)) +
theme_bw() +
theme(axis.ticks.length = unit(5, "pt"),
axis.ticks.length.x.top = unit(-5, "pt"),
axis.ticks.length.y.right = unit(-5, "pt"),
panel.grid = element_blank())
推荐阅读
- docker - Kubernetes Redis rejson持久性数据不保存
- codeigniter - CodeIngiter 电子邮件协议 sendmail、mail 和 SMTP 的区别?
- r - Sommer 封装:mmer 与 MEMMA
- docker - 使用 compose 运行 docker 容器时,npm 找不到 package.json
- php - 使用 php mysql 查找不同商店/仓库中每种产品的总和
- python - Pycharm python解释器错误地显示错误
- javascript - 我需要一些帮助来减少运行测试的时间
- php - 更新关联数组的列不起作用
- c++ - 二叉搜索树插入数据问题
- java - 如何读取“params”数组中的任何一个