2012-07-23 30 views
7

Sử dụng ggplot2, tôi muốn tạo biểu đồ nơi bất kỳ thứ gì bên trên X được nhóm vào thùng cuối cùng. Ví dụ: nếu phần lớn phân phối của tôi nằm trong khoảng từ 100 đến 200 và tôi muốn chia cho 10, tôi sẽ muốn bất kỳ thứ gì trên 200 được binned trong "200+".Tạo thùng cho bất kỳ giá trị nào trên X trong GGPlot2 Biểu đồ

# create some fake data  
id <- sample(1:100000, 10000, rep=T) 
visits <- sample(1:1200,10000, rep=T) 

#merge to create a dataframe 
df <- data.frame(cbind(id,visits)) 

#plot the data 
hist <- ggplot(df, aes(x=visits)) + geom_histogram(binwidth=50) 

Làm cách nào để giới hạn trục X, trong khi vẫn thể hiện dữ liệu tôi muốn giới hạn?

Trả lời

4

Có lẽ bạn đang tìm kiếm đối số breaks cho geom_histogram:

# create some fake data  
id <- sample(1:100000, 10000, rep=T) 
visits <- sample(1:1200,10000, rep=T) 

#merge to create a dataframe 
df <- data.frame(cbind(id,visits)) 

#plot the data 
require(ggplot2) 
ggplot(df, aes(x=visits)) + 
    geom_histogram(breaks=c(seq(0, 200, by=10), max(visits)), position = "identity") + 
    coord_cartesian(xlim=c(0,210)) 

này sẽ trông như thế này (hãy cẩn thận với dữ kiện giả trông khá xấu ở đây và trục cần phải được điều chỉnh cũng như để phù hợp với các vi phạm):

manual breaks on histogram

Edit:

Có lẽ ai đó có thể nặng ở đây:

# create breaks and labels 
brks <- c(seq(0, 200, by=10), max(visits)) 
lbls <- c(as.character(seq(0, 190, by=10)), "200+", "") 
# true 
length(brks)==length(lbls) 

# hmmm 
ggplot(df, aes(x=visits)) + 
    geom_histogram(breaks=brks, position = "identity") + 
    coord_cartesian(xlim=c(0,220)) + 
    scale_x_continuous(labels=lbls) 

Các lỗi âm mưu với:

Error in scale_labels.continuous(scale) : 
    Breaks and labels are different lengths 

nào trông giống như this nhưng điều đó đã được cố định 8 months ago.

+0

Đó là chỉ là về chỗ trên. Bạn sẽ cập nhật nhãn x trục như thế nào nếu tôi muốn thêm thứ gì đó như "200+". – mikebmassey

+0

Tôi nghĩ rằng thông qua 'scale_x_continuous (labels = ...)' nhưng tôi không hoàn toàn chắc chắn –

2

Nếu bạn muốn lận nó một chút để có được xung quanh các vấn đề về ghi nhãn bin sau đó chỉ cần tập con dữ liệu của bạn và tạo ra các giá trị binned trong một mới hy sinh dữ liệu khung:

id <- sample(1:100000, 10000, rep=T) 
visits <- sample(1:1200,10000, rep=T) 

#merge to create a dataframe 
df <- data.frame(cbind(id,visits)) 
#create sacrificical data frame 
dfsac <- df 
dfsac$visits[dfsac$visits > 200 ] <- 200 

Sau đó sử dụng lệnh breaks trong scale_x_continuous xác định nhãn bin của bạn một cách dễ dàng:

ggplot(data=dfsac, aes(dfsac$visits)) + 
    geom_histogram(breaks=c(seq(0, 200, by=10)), 
       col="black", 
       fill="red") + 
    labs(x="Visits", y="Count")+ 
    scale_x_continuous(limits=c(0, 200), breaks=c(seq(0, 200, by=10)), labels=c(seq(0,190, by=10), "200+")) 

enter image description here

Các vấn đề liên quan