2017-01-22 7 views
0

はどのように観測 obs.Aとobs.Bそれぞれがggplotを使用してが割り当てされているかに全体バーをハイライト表示するには?正確なsame thing has been done for the regular hist() functionですが、ggplotの方法は何ですか?それは大小のサンプルサイズのために働くと本当に一つだけ、バーのすべてを強調表示する必要があります。ggplotで観測のビンを強調する方法は?

library(ggplot2) 
data <- data.frame(Var=c(rep("A",50),rep("B",50)), Value=round(rnorm(100,10,2),0)) 
obs.A<-8 
obs.B<-10 
ggplot(data)+ 
    geom_histogram(aes(x=Value))+ 
    facet_grid(Var ~ .) 

編集を説明するためにいくつかのコードの下に

答えて

1

1つのggplotの道をプロットするために使用データフレームにそれを構築することです:

library(ggplot2) 
data <- data.frame(Var=c(rep("A",50),rep("B",50)), Value=round(rnorm(100,10,2),0)) 
obs.A<-8 
obs.B<-10 

data$color <- ifelse(data$Var == "A" & data$Value == obs.A, T, F) 
data$color <- ifelse(data$Var == "B" & data$Value == obs.B, T, data$color) 

ggplot(data)+ 
    geom_histogram(aes(x=Value, fill = color))+ 
    facet_grid(Var ~ .) 

enter image description here

data$Valueの範囲は5-16とデフォルトであるため、これはテストケースのために簡単に動作しますgeom_histogram()bins = 30です。

data <- data.frame(Var=c(rep("A",50),rep("B",50)), Value=round(rnorm(100,10,10),0)) # bigger sd 
obs.A<-8 
obs.B<-10 

data$cuts <- cut(data$Value, 30, labels = F) 
A_colored_cuts <- unique(data$cuts[data$Value == obs.A]) 
data$color <- ifelse(data$Var == "A" & data$cuts == A_colored_cuts, T, F) 

B_colored_cuts <- unique(data$cuts[data$Value == obs.B]) 
data$color <- ifelse(data$Var == "B" & data$cuts == B_colored_cuts, T, data$color) 


ggplot(data)+ 
    geom_histogram(aes(x=Value, fill = color))+ 
    facet_grid(Var ~ .) 

enter image description here

EDIT:大きなサンプルサイズのために、私たちが使用したいと思うあなたはそれをより譲渡作りたい場合は、geom_histogram(binwidth = 1)を設定したり、ビンに基づいてdata$colorを設定し、このような何かしたいと思います前述の2番目のオプションを指定し、geom_histogram(boundary = .5)と指定します。これは、整数のビン区切りが必要なためです。

set.seed(1) 
data <- data.frame(Var=c(rep("A",50),rep("B",50)), Value=round(rnorm(10000,10,10),0)) 
#use code chunk 2 above 
ggplot(data)+ 
    geom_histogram(aes(x=Value, fill = color), boundary = .5)+ 
    facet_grid(Var ~ .) 

enter image description here

+0

しかし、ビニングされた要素の数が多い場合は(rnorm(10000,10,10)を使用してみてください)、バーの一部またはおそらく複数のバーを着色します。これは改善できますか? – RndmSymbl

+0

大きなテストケースに対応するように更新 – Nate

+0

もう一度ありがとうございますが、観測のビンを取得し、ggplotでそのビンを識別して別の色を割り当てる直接の方法はありませんか? – RndmSymbl

1

私たちは(私たちはきれいにし、より有益見てバーグラフのデータサイズでbindwithを調整する必要があるかもしれません)データの任意のサイズのためのハイライトを希望しているために、これを試すことができます。

library(ggplot2) 
set.seed(12345) 
data <- data.frame(Var=c(rep("A",50),rep("B",50)), Value=round(rnorm(100,10,2),0)) 
obs.A<-8 
obs.B<-10 
cond <- (data$Var=='A' & data$Value == obs.A)|(data$Var=='B' & data$Value == obs.B) 
binwidth <- 0.25 
ggplot(data)+ 
    geom_histogram(data=data[!cond,], aes(x=Value), binwidth=binwidth) + 
    geom_histogram(data=data[cond,], aes(x=Value), fill='red', binwidth=binwidth) + 
    facet_grid(Var ~ .) 

enter image description here

set.seed(12345) 
data <- data.frame(Var=c(rep("A",50),rep("B",50)), Value=round(rnorm(10000,10,10),0)) 
obs.A<-8 
obs.B<-10 
cond <- (data$Var=='A' & data$Value == obs.A)|(data$Var=='B' & data$Value == obs.B) 
binwidth <- 0.5 
ggplot(data)+ 
    geom_histogram(data=data[!cond,], aes(x=Value), binwidth=binwidth) + 
    geom_histogram(data=data[cond,], aes(x=Value), fill='red', binwidth=binwidth) + 
    facet_grid(Var ~ .) 

enter image description here

+0

良いアプローチです。しかし、データは非常に大きく、ばらばらに分散しているので、十分に小さな値になるようなbinwidth値を選択するだけです。他の方法はありますか? – RndmSymbl

+0

最後の例でも 'binwidth 1 'を使うことができますが、ヒストグラムはあまり疎らに見えません。 –

1

geom_histogramを美学のために追加するfill

# Example3 
set.seed(12345) 
data <- data.frame(Var = c(rep("A", 50), rep("B", 50)), Value = round(rnorm(100, 10, 2), 0)) 
ggplot(data) + 
    geom_histogram(aes(x = Value, 
        fill = Value == 8 & Var == "A" | Value == 10 & Var == "B"), binwidth=0.5) + 
    facet_grid(Var ~ .) + 
    scale_fill_manual(values = c("grey45", "red"))+ 
    theme(legend.position = "none") 

:我々はscale_fill_manualを使用し、異なる色を割り当てたい場合我々はtheme(legend.position = "none")

# Example 1 
set.seed(12345) 
data <- data.frame(Var = c(rep("A", 50), rep("B", 50)), Value = round(rnorm(100, 10, 2), 0)) 
ggplot(data) + 
    geom_histogram(aes(x = Value, 
        fill = Value == 8 & Var == "A" | Value == 10 & Var == "B"), binwidth=0.5) + 
    facet_grid(Var ~ .) + 
    theme(legend.position = "none") 

enter image description here

# Example 2 
set.seed(12345) 
data <- data.frame(Var = c(rep("A", 50), rep("B", 50)), Value = round(rnorm(10000, 10, 10), 0)) 
ggplot(data) + 
    geom_histogram(aes(x = Value, 
        fill = Value == 8 & Var == "A" | Value == 10 & Var == "B"), binwidth = 0.5) + 
    facet_grid(Var ~ .) + 
    theme(legend.position = "none") 

enter image description here

と特大の凡例を削除します3210

関連する問題