Cách tốt để sử dụng R để tạo một biểu đồ phân tán phân tách dữ liệu bằng cách xử lý là gì?


30

Tôi rất mới với R và các số liệu thống kê nói chung, nhưng tôi cần tạo ra một biểu đồ phân tán mà tôi nghĩ có thể vượt quá khả năng bản địa của nó.

Tôi có một vài vectơ quan sát và tôi muốn tạo ra một biểu đồ tán xạ với chúng, và mỗi cặp rơi vào một trong ba loại. Tôi muốn tạo một biểu đồ phân tán phân tách từng loại, theo màu sắc hoặc bằng ký hiệu. Tôi nghĩ rằng điều này sẽ tốt hơn so với việc tạo ra ba biểu đồ phân tán khác nhau.

Tôi có một vấn đề khác với thực tế là trong mỗi loại, có một cụm lớn tại một điểm, nhưng các cụm lớn hơn trong một nhóm so với hai nhóm khác.

Có ai biết một cách tốt để làm điều này? Gói tôi nên cài đặt và tìm hiểu làm thế nào để sử dụng? Bất cứ ai cũng làm một cái gì đó tương tự?

Cảm ơn

Câu trả lời:


53

các cụm lớn : nếu in chồng lên là một vấn đề, bạn có thể sử dụng alpha thấp hơn, vì vậy các điểm đơn lẻ bị mờ, nhưng quá mức sẽ tạo ra màu sắc mạnh hơn. Hoặc bạn chuyển sang biểu đồ 2d hoặc ước tính mật độ.

require ("ggplot2")
  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, colour = Species)) + stat_density2d ()
    tỉ trọng
    Bạn có thể muốn khía cạnh này ...

  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, fill = Species)) + stat_binhex (bins=5, aes (alpha = ..count..)) + facet_grid (. ~ Species)
    lục giác
    Mặc dù bạn có thể tạo ra âm mưu này mà không có các khía cạnh, thứ tự nguyên bản của Loài sẽ tạo ra bức tranh cuối cùng.

  • Bạn có thể tránh điều này nếu bạn sẵn sàng để tay mình hơi bẩn (= liên kết đến giải thích & mã) và tính toán các màu hỗn hợp cho các hình lục giác: nhập mô tả hình ảnh ở đây

  • Một điều hữu ích khác là sử dụng thùng (hex) cho các khu vực mật độ cao và vẽ các điểm đơn lẻ cho các phần khác:

    ggplot (df, aes (x = date, y = t5)) + 
      stat_binhex (data = df [df$t5 <= 0.5,], bins = nrow (df) / 250) +
          geom_point (data = df [df$t5 > 0.5,], aes (col = type), shape = 3) +
      scale_fill_gradient (low = "#AAAAFF", high = "#000080") +
      scale_colour_manual ("response type", 
        values = c (normal = "black", timeout = "red")) + 
      ylab ("t / s")
    

    nhập mô tả hình ảnh ở đây


Để hoàn thiện các gói âm mưu, tôi cũng đề cập đến lattice:

require ("lattice")
  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Lipse | Species, iris, pch = 20) </ code>

  • xyplot(Sepal.Width ~ Sepal.Length, iris, groups = iris$Species, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Lipse, iris, Groups = iris $ Species, pch = 20) </ code>

  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, groups = iris$Species, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Lipse | Species, iris, Groups = iris $ Species, pch = 20) </ code>


Đáng yêu! Cảm ơn bạn rất nhiều, các thùng hex đã lừa hoàn hảo!
crf

22

Đây là một trong những vấn đề kinh điển đối với tập dữ liệu 'Iris'. Đây là một liên kết đến toàn bộ các dự án âm mưu dựa trên tập dữ liệu đó với mã R, mà bạn có thể thích ứng với vấn đề của mình.

Đây là một cách tiếp cận sử dụng với cơ sở R chứ không phải là gói bổ trợ.

plot(iris$Petal.Length, iris$Petal.Width, pch=21, 
     bg=c("red","green3","blue")[unclass(iris$Species)], 
     main="Edgar Anderson's Iris Data")

tạo ra con số này:

nhập mô tả hình ảnh ở đây

Từ đó, tùy thuộc vào cốt truyện của bạn, bạn có thể bắt đầu rối tung với các mức độ alpha / trong suốt để cho phép thay thế quá mức, v.v. nhưng trước tiên tôi sẽ xây dựng từ một biểu đồ rất cơ bản.

Trong khi có nhiều lý do để gắn bó với cơ sở R, các gói khác đơn giản hóa âm mưu. Tách dữ liệu bằng một tính năng phân biệt là một trong những thế mạnh của gói ggplot2mạng tinh thể . ggplot2 thực hiện các âm mưu hấp dẫn đặc biệt. Cả hai gói được thể hiện trong câu trả lời của @cbeleites.


4
Hơi khó hiểu vì mặc dù bạn khuyên dùng ggplot2 nhưng bạn không sử dụng nó trong ví dụ của mình? Một woudl tương đương ggplot2 là thư viện (ggplot2); qplot (Petal.Ldrops, Petal.Width, color = Species, data = iris, main = "Edgar Anderson's Iris Data"). Điều này cũng có lợi thế là tự động tạo ra một huyền thoại.
Peter Ellis

@PeterEllis Đó là bởi vì trong khi tôi có thể nhận ra thứ gì đó rất phù hợp với ggplot2, tôi thậm chí chỉ có khả năng với đồ họa cơ bản.
Fomite

1
Thủ thuật tuyệt vời với ungroup () trong đồ họa cơ sở BTW
Peter Ellis

16

Hoặc với ggplot2:

ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species)) + geom_point()
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() + facet_grid(~Species)

Sản xuất

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.