首页 > 解决方案 > 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。¿我怎么能改变我的轴?

在此处输入图像描述

标签: rggplot2

解决方案


是的,你绝对可以改变你的轴。它可能会发出警告,因为该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())

在此处输入图像描述


推荐阅读