2011-11-05 35 views
7

Tôi đang tạo dấu chấm bằng cách sử dụng ggplot với mã và dữ liệu bên dưới tạo ra biểu đồ sau đây.Các điểm xếp chồng trong ggplot

ggplot(data=holder, aes(x=Coef, y=CoefShort, colour=factor(Name))) + geom_point() + labs(x="Value", y="Coefficient") + scale_colour_discrete("Model") 

dotplot

của họ là một số lượng đáng kể overplotting và tôi muốn tạo ra một số tách theo chiều dọc giữa các dấu chấm. Nhưng nó phải có hệ thống, tức là thứ tự luôn luôn đỏ-xanh-xanh.

geom_stack dường như chỉ hoạt động khi giá trị x là giống nhau, không phải khi giá trị y giống nhau. Tôi đã thử sử dụng các trục đối diện (hoán đổi x và y), thực hiện position_dodge() rồi thực hiện coord_flip(). Điều này chỉ hoạt động với các thanh, như được thấy bên dưới.

ggplot(data=holder, aes(y=Coef, x=CoefShort, fill=factor(Name))) + geom_bar(position="dodge", aes(ymax=Coef)) + labs(y="Value", x="Coefficient") + scale_fill_discrete("Model") + coord_flip() 

Vertically dodged bar chart

Bất kỳ ý tưởng làm thế nào để đạt được điều đó xếp chồng với geom_point()? Cảm ơn.

Dữ liệu:

structure(list(Coef = c(-3875.46969970703, 7871.08213392282, 1120.33185255098, 1510.13540851347, 1439.07714113149, 1800.92398445336, -3760.05411752962, 8183.74295221482, 1126.98290537184, 1517.99524139857, 1442.73063836897, 1808.03721179571, -90.6507661872817, -71.7225864185226, -103.615416254984, -732.167583256825, -1075.67574987664, -1908.56266462926, -7362.80215630299, 8886.12888250011, 655.767448263926, 848.716877683527, 869.395903077767, 998.254438325812, -211.682481369473, -303.310032581644, -506.1995360406, -978.697664841985, -1440.30190190734, -2325.22236024601, 2625.94998656519, 3573.68798735398, 4217.82910198788, 4534.8789695778, 4967.19941000705, 5072.02764498623, 5419.64684461491), Name = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3), CoefShort = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L), .Label = c("(Intercept)", "carat", "Good", "Very Good", "Premium", "Ideal", "E", "F", "G", "H", "I", "J", "SI2", "SI1", "VS2", "VS1", "VVS2", "VVS1", "IF" ), class = "factor")), .Names = c("Coef", "Name", "CoefShort" ), class = "data.frame", row.names = c(NA, -37L))

Trả lời

8

điểm trong geom_point là zero chiều rộng, vì vậy bạn cần phải thiết lập độ rộng của dodging:

ggplot(data=holder, aes(y=Coef, x=CoefShort, colour=factor(Name))) + 
    geom_point(position=position_dodge(width = 0.8)) + 
    labs(y="Value", x="Coefficient", colour = "Model") + 
    coord_flip() 

enter image description here

+0

đó làm việc tuyệt vời. Tôi không nghĩ rằng nó có thể mà không đi qua toàn bộ coord_flip() một phần? – Jared

+0

Điều đó hoạt động tốt cho những gì tôi đã hỏi. Nhưng nó chỉ ra rằng sau khi coord_flip() scale = "free" trong facet_wrap() không hoạt động đúng nữa. – Jared

+0

@jared: Bạn đã thử 'position_dodge (height = 0.8)' (thay vì 'width')? – naught101

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