2016-05-25 2 views
3

Вот пример данных для моего вопроса:Как исправить/настроить ширину каждой полосы в ggplot geom_tile

sampledata <- matrix(c(1:60,1:60,rep(0:1,each=60),sample(1:3,120,replace = T)),ncol=3) 
colnames(sampledata) <- c("Time","Gender","Grade") 
sampledata <- data.frame(sampledata) 
sampledata$Time <- factor(sampledata$Time) 
sampledata$Grade <- factor(sampledata$Grade) 
sampledata$Gender <- factor(sampledata$Gender) 

Я затевают Heatmap из этой выборки данных с использованием geom_tile

color_palette <- colorRampPalette(c("#31a354","#2c7fb8", "#fcbfb8", "#f03b20"))(length((levels(factor(sampledata$Grade))))) 
ggplot(data = sampledata) + geom_tile(aes(x = Time, y = Gender, fill = Grade))+scale_x_discrete(breaks = c("10","20","30","40","50"))+scale_fill_manual(values =color_palette,labels=c("0-1","1-2","2-3","3-4","4-5","5-6",">6"))+ theme_bw()+scale_y_discrete(labels=c("Female","Male")) 

Я получил этот график: enter image description here

Я хочу настроить ширину мужской и женской отдельно, чтобы получить разные ширины для разных ge nder. Значение ширины показано на следующем рисунке: enter image description here

Возможно ли это сделать, внося изменения в текущий код? Благодаря!

ответ

1

Если вы хотите «ширины», чтобы быть таким же, вы можете использовать height эстетику в geom_tile:

ggplot(data = sampledata) + 
    geom_tile(aes(x = Time, y = Gender, fill = Grade, height = 0.25)) 

Plot 01

Если вы хотите, чтобы они были независимы, то вам необходимо пройти вектор той же длины sampledatadata.frame, пожалуй, самый простой подход, чтобы создать новую переменную:

# Assign Females a height of 0.25 and Males a height of 0.75 
sampledata$myHeight = ifelse(sampledata$Gender == 0, 0.25, 0.75) 

А потом:

ggplot(data = sampledata) + 
    geom_tile(aes(x = Time, y = Gender, fill = Grade, height = myHeight)) 

Plot 02

+1

Спасибо большое! Я нашел это https://github.com/hadley/ggplot2/issues/674. Я думал, что на мой вопрос не может быть дан ответ. Очень хорошо знать, что высота фактически настраивается! – Yukun