2015-10-21 2 views
0

Я уже много просматривал, но, к сожалению, я просто нахожу туманную информацию. Я хочу показать соотношение по полу по длине. Для этого я сделал сложный планшет с ggplot2 (geom_bar). Это код:Q: R ggplot2 пределы оси geom_bar ... ограничения по оси x и метки

Data <- data.frame(LCnew=c(30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40), 
        sex=c(1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2)) 
ggplot(Data, aes(x=factor(LCnew), fill=factor(sex)))+geom_bar(position="fill") + scale_x_discrete("Lengthclass [mm]") + scale_y_continuous("Proportion of sexes") + scale_fill_manual(values=cols) 

cols - это простой вектор с цветами в нем.

Это сюжет до сих пор:

enter image description here

Моя проблема заключается в том, что я не могу изменить текст оси. Я просто хочу текст ниже каждого пятого бара, иначе они перекрываются. Я попробовал его с лимитами и сломал команду, но это просто дало мне пустой граф.

scale_x_continuous("Standard Length [mm]",limits=c(30,85),breaks=c(30,35,40,45,50,55,60,65,70,75,80,85)) 

Любые предложения?

+1

добавить некоторые данные на вопрос – Mateusz1981

+0

, если честно: я не знаю, как добавить данные. .. это мой первый вопрос здесь, и я все еще борется. извините за это:/ – kilewi

+1

[Некоторая информация о том, как дать минимальный воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610). – Jaap

ответ

1

Попробуйте добавить «метки»

scale_x_continuous("Standard Length [mm]", breaks=c(30,35,40,45,50,55,60,65,70,75,80,85),labels=c(30,35,40,45,50,55,60,65,70,75,80,85)) 
+0

спасибо! Я думаю, что я недостаточно описал свою проблему. мой набор данных имеет более 40 значений длины (значения x), и когда отображается каждый номер, он просто переполнен. поэтому я хотел просто показать каждое пятое число (30,35,40,45,50 .... 75,80). но ответ jaap и lawyeR уже решил это. все еще большое спасибо за ваши усилия! – kilewi

2

Если вы хотите, чтобы предотвратить это метки накладываются друг на друга, есть несколько стратегий, которые вы можете следовать:

1) Определение разрывов:

ggplot(y, aes(x=factor(length), fill=factor(sex))) + 
    geom_bar(position="fill", width=0.7) + 
    scale_x_discrete("Standard Length [mm]", breaks=c(300000,350000,400000)) + 
    scale_y_continuous("Proportion of sexes", expand=c(0,0)) + 
    scale_fill_manual("Sex", values=c("blue","pink"), labels=c("Male","Female")) + 
    theme_minimal() 

, который дает следующий график:

enter image description here

2) Изменение угла наклона меток:

ggplot(y, aes(x=factor(length), fill=factor(sex))) + 
    geom_bar(position="fill", width=0.7) + 
    scale_x_discrete("Lengthclass [mm]", expand=c(0,0)) + 
    scale_y_continuous("Proportion of sexes", expand=c(0,0)) + 
    scale_fill_manual("Sex", values=c("blue","pink"), labels=c("Male","Female")) + 
    theme_minimal() + 
    theme(axis.text.x = element_text(angle=90, vjust = 0.5)) 

, который дает:

enter image description here

3) Поворот сюжета:

ggplot(y, aes(x=factor(length), fill=factor(sex))) + 
    geom_bar(position="fill", width=0.7) + 
    scale_x_discrete("Lengthclass [mm]", expand=c(0,0)) + 
    scale_y_continuous("Proportion of sexes", expand=c(0,0)) + 
    scale_fill_manual("Sex", values=c("blue","pink"), labels=c("Male","Female")) + 
    coord_flip() + 
    theme_minimal() 

, который дает:

enter image description here


Используемые данные:

y <- structure(list(length = c(300000, 300000, 310000, 310000, 320000, 320000, 330000, 330000, 340000, 340000, 350000, 350000, 360000, 360000, 370000, 370000, 380000, 380000, 390000, 390000, 400000, 400000, 300000, 310000, 330000, 340000, 360000, 380000, 390000), 
        sex = c(1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2)), .Names = c("length", "sex"), row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "110", "41", "71", "101", "131", "171", "201"), class = "data.frame") 
+0

большое спасибо Яап! теперь я просто должен решить, какой вариант мне больше нравится;) ты мне очень помог! – kilewi

+0

@kilewi В этом случае считается хорошей практикой принимать ответ. Вы можете сделать это, нажав зеленую галочку под кнопками голосования. См. Также эту страницу справки: [Что делать, если кто-то отвечает на мой вопрос?] (Http://stackoverflow.com/help/someone-answers) – Jaap

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