2016-06-23 5 views
-2

Я хотел бы установить предел для оси x, используя график ggplot bar. Весь сюжет в порядке, но когда я использую ylim (1,6) (это ограничения, которые мне нужны), бары исчезают.Как изменить пределы оси x ggplot2 r

данных:

var.A <- as.numeric(c(1:13)) 
var.B <- c(4.351833, 2.938000, 4.726465, 3.747162, 3.720737, 4.297117, 4.304500, 4.061277, 4.595236, 4.105444, 3.701684, 3.523563, 4.170000) 
df <- data.frame(var.A,var.B) 

Ggplot код:

ggplot(df, aes(x=factor(var.A), y=var.B)) + 
    geom_bar(position=position_dodge(), stat="identity", fill="#fff68f", colour="darkgrey", width = 0.4) + 
    coord_flip()+ 
    xlab("") + 
    ylab("") + 
    scale_x_discrete(labels=c("aaaaaaa aaaaa","bbbbb bbb bbbb","cccc ccc","dddd dd ddddd", 
          "eee e eeeee e ee","ffffffff","gggggggg","hhhhhhh","iiii", 
          "jjjjjj","kkkkkkk","llllll","mmmmmmmm")) 

И когда я добавляю: ylim(1,6) + дела идут не так.

И еще одно. Цвет каждого бара устанавливается как fill="#fff68f". Есть ли какое-либо решение изменить цвет одного бара, например, первый сверху, я хотел бы быть другим, т. Е. #ee2c2c.

+0

Я поставил неправильный код ggplot. Я пропустил coord_flip() + Теперь все в порядке, –

+1

Попробуйте использовать 'coord_flip (ylim = c (1,6))'. Посмотрите на помощь для 'coord_cartesian', которая объясняет разницу между двумя способами установки лимитов. То, как вы это делали, каждое наблюдение вне пределов установлено на 'NA', и поскольку все бары начинаются с 0, это все из них. –

ответ

1

Поскольку вы использовали coord_flip(), вы можете установить пределы по оси x с помощью scale_y_continuous(expand=c(0,0),limits=c(1,6),oob = rescale_none) и для установки цветов для каждого бара вы можете использовать scale_fill_manual(values = c("#ee2c2c",...).

Так что, если вы хотите установить цвет баров вручную, сначала нужно создать вектор имен и вставить его в dataframe:

names <- c("aaaaaaa aaaaa","bbbbb bbb bbbb","cccc ccc","dddd dd ddddd", 
"eee e eeeee e ee","ffffffff","gggggggg","hhhhhhh","iiii", 
"jjjjjj","kkkkkkk","llllll","mmmmmmmm") 

var.A <- as.numeric(c(1:13)) 
var.B <- c(4.351833, 2.938000, 4.726465, 3.747162, 3.720737, 4.297117, 4.304500, 4.061277, 4.595236, 4.105444, 3.701684, 3.523563, 4.170000) 
df <- data.frame(var.A,var.B,names) 

И заказать имена переменных и цвета в ggplot вам нужно изменить структуру вектора от характера к фактору (чтобы получить уровни).

var.names = factor(df$names, 
       levels = c("aaaaaaa aaaaa","bbbbb bbb bbbb","cccc ccc","dddd dd ddddd", "eee e eeeee e ee","ffffffff","gggggggg","hhhhhhh","iiii", "jjjjjj","kkkkkkk","llllll","mmmmmmmm"), ordered=T) 

Так что ваш код затем выглядит следующим образом:

ggplot(df, aes(x=var.names, y=var.B, fill=as.factor(var.names))) + 
    geom_bar(position=position_dodge(), stat="identity", width = 0.4) + 
    coord_flip()+ 
    scale_y_continuous(expand=c(0,0),limits=c(1,6),oob = rescale_none) + 
    xlab("") + 
    ylab("") + 
    scale_fill_manual(values = c(c(rep("#fff68f",12)),"#ee2c2c")) 

И выход

enter image description here