反转图中x轴的比例

时间:2016-06-16 02:51:01

标签: r data-visualization

我在R和我自己的自定义x和y轴上创建了一个图。我希望x轴以相反的顺序显示(1-0 by -.02)。我已经阅读了许多帖子和帖子,建议使用xlim和反向范围,但我似乎无法使它工作。一旦绘制,我也将轴标签转换为百分比乘以100(正如您将在代码中看到的那样)。这是我到目前为止所拥有的;

plot(roc.val, xlab = "Specificity (%)", ylab = "Sensitivity (%)", axes = FALSE)
axis(2, at = seq(0,1,by=.2), labels = paste(100*seq(0,1, by=.2)), tick = TRUE)
axis(1, at = seq(0,1,by=.2), labels = paste(100*seq(0,1, by=.2)), tick = TRUE)

如何反转x轴刻度,使值从100开始,以0为增量结束,以20为增量?

4 个答案:

答案 0 :(得分:7)

我认为这会创建一个y轴顺序相反的情节:

x <- seq(-4, 4, length = 10)
y <- exp(x) / (1 + exp(x))
plot(x,y, ylim = rev(range(y)))

这将删除轴值:

x <- seq(-4, 4, length = 10)
y <- exp(x) / (1 + exp(x))
plot(x,y, ylim = rev(range(y)), labels = FALSE)

我猜您可以根据线的变化分配所需的轴值:

axis(2, at = seq(0,1,by=.2), labels = paste(100*seq(0,1, by=.2)), tick = TRUE)
axis(1, at = seq(0,1,by=.2), labels = paste(100*seq(0,1, by=.2)), tick = TRUE)

答案 1 :(得分:2)

改编Mark Miller解决类似问题的答案(我通过寻找解决方案找到了这个主题),并在https://tolstoy.newcastle.edu.au/R/help/05/03/0342.html找到了他的解决方案的变体。
基本上,如果要反转绘图中的X轴值,而不是使用ylim = rev(range(y)),则可以使用xlim = rev(c(-4,4))。

par(mfrow=c(1,1))
plot(x, y, ylim=range(y), xlim=c(-4, 4), axes=FALSE)
par(new=TRUE)
plot(-100, -100, ylim=range(y), xlim=c(-4, 4), axes=FALSE, xlab="", ylab="", main="")
axis(1, at = seq(-4,4,by=1), labels = seq(-4,4,by=1), tick = TRUE)
axis(2, at = seq(0,1,by=.2), labels = paste(100*seq(0,1, by=.2)), tick = TRUE)

plot1

如果您想保持x轴值的真实顺序,可以使用:

func joinBtnDelegate(at index: IndexPath) {

        if let jlist = self.joinAllAllowedInnoList , !jlist.isEmpty{
            Dataholder.sharedInstance().selectedJoin = jlist[index.row]
            let vc = self.storyboard?.instantiateViewController(withIdentifier: "PickVideoViewController") as! PickVideoViewController
           self.navigationController?.pushViewController(vc, animated: true)
        }
    }

plot2

我发布此解决方案是因为我需要一些非常简单的方法来解决我的问题。并且它的解决方案需要具有正确顺序的X轴值的图(并且不反转)。

答案 2 :(得分:1)

df <- data.frame(x=seq(0,1, length.out=50), y=seq(0, 1, length.out=50))
plot(df)

enter image description here

df$x1 <- (max(df$x) - df$x)/ (max(df$x) - min(df$x))
plot(df$x1, df$y, axes=F, xlab = "Specificity (%)", ylab = "Sensitivity (%)")
axis(2, at = seq(0,1,by=.2), labels = paste(100*seq(0,1, by=.2)), tick = TRUE)
axis(1, at = seq(0,1,by=.2), labels = paste(100*seq(1,0, by=-.2)), tick = TRUE)

enter image description here

答案 3 :(得分:0)

首先,请查看UIViewController库以制作精美且可扩展的图形。如果您还没有接触过R,它是Tidyverse方法中的一部分,它是改变游戏规则的方法。

例如,要使用ggplot解决问题,您只需在图形中添加术语UIViewController

请参阅:http://ggplot.yhathq.com/docs/scale_x_reverse.html