web-dev-qa-db-ja.com

プロットのx軸のスケールを反転します

Rと独自のカスタムx軸とy軸でプロットを作成しました。 x軸を逆の順序で表示したい(1-0 by -.02)。私はxlimとreverse rangeの使用を提案する多数の投稿とスレッドを読みましたが、それを機能させることができないようです。プロットしたら、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で始まり、20の増分で0で終わるようにするにはどうすればよいですか?

11
Courtney

これにより、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)
10
Mark Miller
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

2
Adam Quek

同様の問題を解決するためにマークミラーの回答を適応させ(解決策を探してこのトピックを見つけました)、彼の解決策のバリエーションを https://tolstoy.newcastle.edu.au/R/help/05で見つけました/03/0342.html
基本的に、プロットのX軸の値を逆にしたい場合は、ylim = rev(range(y))を使用する代わりに、xlim = rev(c(-4,4))を使用できます。

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

plot1

また、x軸の値を正しい順序で保持したい場合は、次のように使用できます。

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)

plot2

私がこの解決策を投稿しているのは、私の問題を解決するために非常に簡単なものが必要だったからです。そして、そのための解決策は、X軸の値が正しい順序で(そして逆転されずに)プロットされていることです。

2
Eduardo Alvim

まず、_ggplot2_ライブラリをチェックして、美しく拡張可能なグラフィックを作成してください。 RへのTidyverseアプローチの一部であり、Rに触れていない場合はゲームチェンジャーです。

たとえば、ggplotを使用して問題を解決するには、単にscale_x_reverse()という用語をグラフィックに追加します。

参照: http://ggplot.yhathq.com/docs/scale_x_reverse.html

1
Daniel