4

Rでは、次のヒストグラムをプロットしました。問題はX軸にあります。データの大部分は[0、10]の間隔に分類されます。X値が10より大きいものはほとんどありませんが、最大のものは34です。

したがって、X軸の34まで0、1、2、...を表示する代わりに、0、1、2、...、10、15、20、25、30を表示します。つまり、X> 10の場合、ラベルが重ならないように、5の間隔でのみラベルが表示されます。

図の例

これが私のRコードです。それを修正する方法は?

d<-read.table("16_prop_s.tsv", header=T, sep="\t")
library(ggplot2)
library(scales)
ggplot(d, aes(x=factor(NRB))) + 
   geom_histogram(aes(y=(..count..)/sum(..count..))) + 
   scale_y_continuous(labels=percent_format()) + 
   xlab("Rotatable bonds") + opts(axis.title.y = theme_blank()) +
   opts(axis.title.x = theme_text(size = 24)) + 
   opts(axis.text.x = theme_text(size = 18)) + 
   opts(axis.text.y = theme_text(size = 18))
4

2 に答える 2

13

カスタムブレークでscale_x_discreteを使用します。

d <- data.frame(NRB = c(abs(round(rnorm(1000, 5, 4))), 1:34))
library(ggplot2)
library(scales)
p <- ggplot(d, aes(x=factor(NRB))) +
  geom_histogram(aes(y=(..count..)/sum(..count..))) +
  scale_y_continuous(labels=percent_format()) +
  xlab("Rotatable bonds") + opts(axis.title.y = theme_blank()) +
  opts(axis.title.x = theme_text(size = 24)) +
  opts(axis.text.x = theme_text(size = 18)) +
  opts(axis.text.y = theme_text(size = 18))

p + scale_x_discrete(breaks = c(1:10, seq(15, 35,5)), 
                     labels = c(1:10, seq(15, 35,5)))

ここにコードを入力してください

均等に分散されたグリッド線が必要であるが、同じ数の場合は、空のラベルを使用します。

x <- 11:35
p + scale_x_discrete(breaks = c(1:35)), 
                     labels = c(1:10, ifelse(x%%5 == 0, x, "")))
于 2012-08-19T09:48:52.950 に答える
4

私は@lselzerのソリューションが好きですが、技術的にはあなたが探しているものではないかもしれません。読者は、スケールがおそらく対数スケールであるという印象を受けますが、これはおそらくあなたが望むものではありません。このように、間に空の値を持つラベルを追加できます。

p + scale_x_discrete(breaks = 1:34, 
   labels = c(1:10, "", "", "", "", 15, "", "", "", "", 20, "", "", "", "", 25, "", "", "", "", 30, "", "", "", 34))

ここに画像の説明を入力してください

于 2012-08-19T14:51:27.650 に答える