2015-03-12 3 views
1

Я хочу, чтобы произвести гистограмму с ggplot, у меня есть dataframe "plot_data"неравные пространства в ggplot гистограмме

plot_data<-data.frame(CLV.decile=unique(subset.customer_data$CLV.decile), 
CLV=unique(subset.customer_data$mean.CLV.decile)) 

, который выглядит, как этот

> plot_data 
    CLV.decile CLV 
1   10 1560 
2   5 1525 
3   1 1512 

Это сюжет:

ylim <- c(0, 1.1*max(plot_data$CLV)) 

ggplot(plot_data, aes(x=CLV.decile, y=CLV)) + 
geom_histogram(stat="identity",fill="skyblue",colour="black") + 
labs(x="Decile",y="CLV") + geom_text(aes(label=CLV), vjust=-1) + ylim(ylim) + 
scale_x_reverse(breaks = plot_data$CLV.decile) 

Как я могу это исправить? Заранее спасибо

enter image description here

+0

Если я правильно понял вашу проблему - попробуйте 'x = factor (CLV.decile)' под 'aes()'. –

+0

: Ошибка: Дискретное значение, заданное для непрерывной шкалы Дополнительно: Предупреждающие сообщения: 1: В Ops.factor (x): - не имеет смысла для факторов – thoscha

+0

Начните с двух строк - 'ggplot()' и ' geom_bar() 'вместо гистограммы. И посмотрим, куда он ведет сейчас. –

ответ

1

Проблема заключается ваша ось х непрерывна. Попробуйте это с помощью:

library(ggplot2) 
ylim <- c(0, 1.1*max(plot_data$CLV)) 

ggplot(plot_data, aes(x=as.factor(CLV.decile), y=CLV)) + 
    geom_histogram(stat="identity",fill="skyblue",colour="black") + 
    labs(x="Decile",y="CLV") + geom_text(aes(label=CLV), vjust=-1) + ylim(ylim) + 
    scale_x_discrete(limits=as.character(plot_data$CLV.decile)) 

Вы должны иметь CLV.decile как фактор, а затем обеспечить scale_x_discrete указать порядок.

enter image description here

И бруски имеют равные промежутки между ними.

Edit:

Это по существу barplot, так что вы могли бы также рассмотреть вопрос об изменении geom_histogram в geom_bar без изменения на выходе.

+0

спасибо большое lyzandeR, вот именно то, что я искал! – thoscha

+0

Счастлив, что я могу помочь :) – LyzandeR