2016-11-17 5 views
0

я использую этот код, чтобы сделать перекрывающийся гистограмму в R.Shading в барах в BarChart в R

#Random numbers 
h2<-rnorm(1000,4) 
h1<-rnorm(1000,6) 

# Histogram Colored (blue and red) 
hist(h1, col=rgb(1,0,0,0.5),xlim=c(0,10), ylim=c(0,200), main="Overlapping Histogram”, xlab="Variable”) 
hist(h2, col=rgb(0,0,1,0.5), add=T) 
box() 

Этот код производит этот сюжет:

overlapping histogram

Что я имею пытался выяснить, как я могу заставить тьму баров соответствовать значениям в моих данных. Другими словами, для переменной «h1», как я могу сделать большие значения, есть более темные цветные полосы?

Спасибо!

+0

Возможно, вы захотите ознакомиться с недавно выпущенным ggplot2 и его возможностями масштабирования цвета [R blogger article] (https://www.r-bloggers.com/overlapping-histogram-in-r/) –

ответ

1

Было бы намного легче сделать, используя ggplot2. Но вы также можете попробовать сделать это следующим образом:

#Random numbers 

set.seed(11235) 

h1 <- rnorm(1000, 6) 
h2 <- rnorm(1000, 4) 

# Histogram Colored (blue and red), alpha value corresponds to freq. 

hist(h1, 
    col=rgb(1, 0, 0, hist(h1, plot = F)$density), 
    xlim = c(0, 10), 
    ylim = c(0, 200), 
    xlab='Variable', 
    main='Overlapping Histogram' 
    ) 
hist(h2, col = rgb(0, 0, 1, hist(h2, plot = F)$density), add = T) 
box() 

alpha~frequency histogram

# Histogram Colored (blue and red), alpha value corresponds 
# to variable value. 

mynorm <- function(x){ 
    return((x-min(x))/(max(x)-min(x))) 
} 
hist(h1, 
    col=rgb(1, 0, 0, mynorm(hist(h1, plot = F)$mids)), 
    xlim = c(0, 10), 
    ylim = c(0, 200), 
    xlab='Variable', 
    main='Overlapping Histogram' 
) 
hist(h2, col = rgb(0, 0, 1, mynorm(hist(h2, plot = F)$mids)), add = T) 
box() 

alpha~variable value

Таким образом, вы просто использовать частоты | переменные-значения в качестве альфа-значений в RGB-цвета Спецификация.

+0

Извините, вторая часть было неправильно, я сделал издание. – utubun

+0

Спасибо за ответ. Это прекрасно работало! Один следующий вопрос: как я могу сделать это так, чтобы затенение получало более темные значения для одной переменной (синий слева) и светлее для более высоких значений на другом (тот, что справа)? – user2917781

+0

Вам просто нужно отменить вектор альфа-значений в h1: 'rev (mynorm (hist (h1, plot = F) $ mids))' Вы получите что-то вроде [this] (https: // www .dropbox.com/s/l1jyrow9q1b5gur/baseHist.jpeg? dl = 0) Но это своего рода спорт, чтобы делать такие вещи таким образом. Я еще не пробовал, но я думаю, что с 'ggplot2' было бы намного проще. – utubun

Смежные вопросы