2010-04-07 46 views
5

Tôi chỉ đến một chéo this nice code mà làm này âm mưu ma trận tán xạ:Tương Scatter-ma trận âm mưu với kích thước điểm khác nhau (R)

alt text http://addictedtor.free.fr/graphiques/graphiques/graph_137.png

Và muốn thực hiện nó vào một biến quy mô likret (số nguyên từ 1 đến 5) bằng cách làm cho kích thước/màu của dấu chấm (trong hình tam giác dưới) khác nhau tùy theo số lượng tùy chọn của loại đó xảy ra (như hiệu ứng jitter có thể đã cho tôi).

Bất kỳ ý tưởng nào về cách thực hiện điều này trên cơ chế vẽ đồ thị cơ sở?

Cập nhật:

tôi đã thực hiện các chức năng sau đây, nhưng không biết làm thế nào để có quy mô của các dấu chấm luôn là "tốt", bạn nghĩ gì?

panel.smooth2 <- function (x, y, col = par("col"), bg = NA, pch = par("pch"), 
        cex = 1, col.smooth = "red", span = 2/3, iter = 3, ...) 
{ 
    require(reshape) 
    z <- merge(data.frame(x,y), melt(table(x ,y)),sort =F)$value 
    z <- z/ (4*max(z)) 

    symbols(x, y, circles = z,#rep(0.1, length(x)), #sample(1:2, length(x), replace = T) , 
      inches=F, bg="blue", fg = bg, add = T) 

    # points(x, y, pch = pch, col = col, bg = bg, cex = cex) 
    ok <- is.finite(x) & is.finite(y) 
    if (any(ok)) 
     lines(stats::lowess(x[ok], y[ok], f = span, iter = iter), 
      col = col.smooth, ...) 
} 



a1 <- sample(1:5, 100, replace = T) 
a2 <- sample(1:5, 100, replace = T) 
a3 <- sample(1:5, 100, replace = T) 
aa <- data.frame(a1,a2,a3) 


pairs(aa , lower.panel=panel.smooth2) 

Trả lời

3

Bạn có thể sử dụng '' (tương tự như 'dòng' các phương pháp, 'abline' et al.)

Phương pháp này sẽ giúp bạn điều khiển hạt mịn hơn cả kích thước biểu tượng và màu sắc trong một đơn dòng mã.

Sử dụng 'biểu tượng', bạn có thể đặt kích thước, màu sắc và hình dạng biểu tượng. Hình dạng và kích thước được đặt bằng cách truyền trong vec-tơ cho kích thước của mỗi biểu tượng và liên kết nó với 'vòng tròn', 'hình vuông', 'hình chữ nhật' hoặc 'sao', ví dụ: 'sao' = c (4, 3, 5, 1). Màu được đặt bằng 'bg' và/hoặc 'fg'.

symbols(x, y, circles = circle_radii, inches=1/3, bg="blue", fg=NULL) 

Nếu tôi hiểu phần thứ hai của câu hỏi của bạn, bạn muốn trở thành một cách hợp lý chắc chắn rằng các chức năng bạn sử dụng để mở rộng các biểu tượng trong âm mưu thực hiện điều đó một cách có ý nghĩa. Các chức năng 'biểu tượng' quy mô (ví dụ) bán kính của vòng kết nối dựa trên giá trị trong biến 'z' (hoặc cột data.frame, v.v.) Trong dòng bên dưới, tôi đặt kích thước ký hiệu (bán kính) tối đa là 1/3 inch - mỗi biểu tượng ngoại trừ lớn nhất có bán kính một phần nhỏ hơn, được chia tỷ lệ bởi giá trị của điểm đó trên giá trị lớn nhất. hơn một tỷ lệ với Đây có phải là lựa chọn tốt không? Tôi không biết - có vẻ như với tôi rằng đường kính hoặc chu vi đặc biệt có thể tốt hơn. Trong mọi trường hợp, đó là một sự thay đổi tầm thường. Tóm lại, 'biểu tượng' với 'vòng tròn' được truyền vào sẽ mở rộng bán kính của các biểu tượng theo tỷ lệ với tọa độ 'z' - có lẽ phù hợp nhất cho các biến liên tục. Tôi sẽ sử dụng màu ('bg') cho các biến/yếu tố rời rạc. Một trong những cách để sử dụng 'biểu tượng' là gọi hàm của bạn và chuyển loại = 'n' tạo đối tượng ô nhưng ngăn cản vẽ biểu tượng để bạn có thể vẽ chúng bằng chức năng 'biểu tượng' tiếp theo.

Tôi sẽ không đề xuất 'cex' cho mục đích này. 'cex' là một yếu tố mở rộng cho cả kích thước văn bản và kích thước ký hiệu, nhưng trong đó hai yếu tố cốt truyện nó ảnh hưởng đến khi bạn truyền nó vào - nếu bạn đặt nó qua 'ngang' thì nó hoạt động trên hầu hết văn bản xuất hiện trên cốt truyện; nếu bạn đặt nó trong hàm 'cốt truyện' thì nó sẽ ảnh hưởng đến kích thước ký hiệu.

+0

Cảm ơn Doug, tôi đã đi với giải pháp của bạn nhưng một câu hỏi khác xuất hiện (tôi đã cập nhật câu hỏi gốc) - bất kỳ suy nghĩ nào? –

+0

ok Tal - chỉnh sửa câu trả lời của tôi ngay bây giờ trong ánh sáng của cập nhật của bạn Q. – doug

+0

Cảm ơn shane, tôi thực hiện đề xuất của bạn và công bố kết quả (với tín dụng rõ ràng) ở đây: http://www.r-statistics.com/2010/04/correlation-scatter-plot-matrix-for-ordered-categorical-data / –

2

Chắc chắn, chỉ cần sử dụng cex:

set.seed(42) 
DF <- data.frame(x=1:10, y=rnorm(10)*10, z=runif(10)*3) 
with(DF, plot(x, y, cex=z)) 

mang đến cho bạn thay đổi kích thước hình tròn. Màu sắc có thể chỉ đơn giản là thứ nguyên thứ tư.

+0

Xin chào Dirk, cảm ơn. Tôi đã kết thúc bằng cách sử dụng gợi ý của Doug nhưng một câu hỏi khác xuất hiện (tôi đã cập nhật câu hỏi gốc) - bất kỳ suy nghĩ nào? –

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