2012-04-01 59 views
5

Tôi có một bảng có phạm vi trung bình và khoảng cách giữa các vùng. Tôi muốn tạo một chấm điểm, nơi dấu chấm sẽ hiển thị mức trung bình này, và một thanh sẽ kéo dài qua dấu chấm, để hiển thị phạm vi interquartile. Nói cách khác, dấu chấm sẽ là điểm giữa của một thanh, chiều dài của nó sẽ bằng với dữ liệu dãy ô liên tiếp của tôi. Tôi đang làm việc trong R.thêm dữ liệu trải rộng vào các chấm trong R

Ví dụ,

labels<-c('a','b','c','d') 
averages<-c(10,40,20,30) 
ranges<-c(5,8,4,10) 
dotchart(averages,labels=labels) 

nơi các dãy sau đó sẽ được thêm vào cốt truyện này như quán bar.

Bất kỳ ý tưởng nào?

Cảm ơn!

Trả lời

8

Một phương pháp khác, sử dụng cơ sở.

labels <- c('a', 'b', 'c', 'd') 
averages <- c(10, 40, 20, 30) 
ranges <- c(5, 8, 4, 10) 
dotchart(averages, labels=labels, xlab='average', pch=20, 
     xlim=c(min(averages-ranges), max(averages+ranges))) 
segments(averages-ranges, 1:4, averages+ranges, 1:4) 

dotchart with error bars

4

ggplot2 có một cơ sở tốt để làm điều này:

library(ggplot2) 

labels<-c('a','b','c','d') 
averages<-c(10,40,20,30) 
ranges<-c(5,8,4,10) 

x <- data.frame(labels,averages,ranges) 

ggplot(x, aes(averages,labels)) + 
geom_point() + 
geom_errorbarh(aes(xmin=averages-ranges,xmax=averages+ranges)) 

Cung cấp cho bạn một âm mưu như:

Dot plot with ranges

+1

tuyệt vời! và chỉ để đảm bảo rằng tôi hiểu, dòng cuối cùng phải là (khoảng/2) mỗi lần, để nhận được một nửa phạm vi ở mỗi bên của mức trung bình, đúng không? – Pascal

+0

Phụ thuộc vào cách bạn đã xác định phạm vi, nhưng nếu chúng đại diện cho một phạm vi thực tế (sự khác biệt giữa minima và maxima) hơn có. Nếu chúng là số liệu lỗi tiêu chuẩn, hơn cách tôi đã xử lý chúng ở trên là những gì bạn cần. –

7

Đối với hồ sơ, đây là một giải pháp lưới, trong đó sử dụng một cặp vợ chồng các chức năng từ gói Hmisc:

library(lattice) 
library(Hmisc) 

labels<-c('a','b','c','d') 
averages<-c(10,40,20,30) 
ranges<-c(5,8,4,10) 
low <- averages - ranges/2 
high <- averages + ranges/2 
d <- data.frame(labels, averages, low, high) 

Dotplot(labels ~ Cbind(averages, low, high), data = d, 
     col = 1,          # for black points 
     par.settings = list(plot.line = list(col = 1)), # for black bars 
     xlab = "Value") 

enter image description here

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