Kiểm soát kích thước của các điểm trong một biểu đồ phân tán R?


116

Trong R, plot()hàm lấy một pchđối số điều khiển sự xuất hiện của các điểm trong cốt truyện. Tôi đang tạo ra các biểu đồ tán xạ với hàng chục nghìn điểm và thích một chấm nhỏ, nhưng không quá nhỏ. Về cơ bản, tôi thấy pch='.'quá nhỏ, nhưng pch=19quá béo. Có một cái gì đó ở giữa hoặc một số cách để thu nhỏ các chấm xuống bằng cách nào đó?


Thay vì làm cho các chấm nhỏ hơn, có cách nào để chỉ vẽ 100 điểm dữ liệu ngẫu nhiên sẽ dễ nhìn thấy hơn 1000 không?
dùng2363642

Đối với nhiều điểm nhỏ, sử dụng alpha (độ trong suốt) có thể tạo ra một biểu đồ phân tán nhiều thông tin hơn là chỉ sử dụng ít điểm hơn để vẽ biểu đồ.

1
Tôi đề nghị không sử dụng pch='.', nó sẽ ra khỏi trung tâm. Nguồn: Tôi pch='.'thường sử dụng thường xuyên
genorama

@geneorama Bạn có nghĩa là sử dụng ·thay vì .?
nanaki

@nanaki ít nhiều, nhưng kỳ lạ là biểu tượng của bạn xuất hiện dưới dạng các hộp nhỏ khi tôi sử dụng nó trong R. Các câu trả lời dưới đây thực hiện tốt công việc giải thích phương pháp đúng.
genorama

Câu trả lời:


100

Hãy thử cexlập luận:

?par

  • cex
    Một giá trị số cho biết số lượng mà âm mưu vẽ biểu tượng và ký hiệu sẽ được phóng to so với mặc định. Lưu ý rằng một số hàm đồ họa như plot.default có một đối số của tên này nhân bội tham số đồ họa này và một số hàm như các điểm chấp nhận một vectơ các giá trị được tái chế. Các mục đích sử dụng khác sẽ chỉ lấy giá trị đầu tiên nếu một vectơ có độ dài lớn hơn một được cung cấp.

15
Tôi không nghĩ mình sẽ sử dụng 'cex' để kiểm soát kích thước biểu tượng trừ khi tôi không có lựa chọn nào khác. Nó chỉ hoạt động một số thời gian; quy tắc là khi 'cex' được đặt qua 'par', nó sẽ ảnh hưởng đến kích thước của (hầu hết) văn bản trên cốt truyện, khi được đặt bên trong 'lô', 'cex' chỉ ảnh hưởng đến kích thước ký hiệu. Vì vậy, nếu bạn áp dụng sai quy tắc đó thì không chỉ kích thước biểu tượng của bạn không bị thay đổi mà giờ đây bạn có nhiều tham số ảnh hưởng đến kích thước văn bản (cex.axis, cex.lab, cex.main và cex.sub - tất cả đều làm như vậy làm việc như 'cex', chỉ là mảnh khôn ngoan). Mã như thế rất khó để duy trì và mở rộng.
doug

5
Đồng ý. Thiết lập cextoàn cầu thông qua parthay đổi tất cả các loại, bao gồm cả tỷ lệ lợi nhuận, mà bạn phải sửa. thiết lập cexbên trong plot, tuy nhiên, dường như làm việc.
bay

Lời khuyên được đưa ra ở trên bởi nhận xét của doug không hẳn là sai nhưng nó vượt quá đáng kể bất kỳ vấn đề tiềm ẩn nào khi sử dụng cexđối số khi vẽ. Có rất nhiều, rất nhiều trường hợp nó vừa hữu ích vừa là lựa chọn tốt nhất.
Joran

lwdkiểm soát độ rộng dòng của pch, vd plot(1:5, pch=1:5, col=1:5, lwd=1:5). Cảm ơn bạn sthda.com/english/wiki/ từ
genorama

95

pch = 20 trả về một ký hiệu có kích thước giữa "." và 19.

Đó là một biểu tượng đầy (có lẽ là những gì bạn muốn).

Bên cạnh đó, ngay cả hệ thống đồ họa cơ bản trong R cũng cho phép người dùng kiểm soát chi tiết về kích thước, màu sắc và hình dạng biểu tượng. Ví dụ,

dfx = data.frame(ev1=1:10, ev2=sample(10:99, 10), ev3=10:1)

with(dfx, symbols(x=ev1, y=ev2, circles=ev3, inches=1/3,
                  ann=F, bg="steelblue2", fg=NULL))

Ví dụ đồ thị


Tôi thích cốt truyện này, nhưng tôi muốn bán kính bằng với số lượng quan sát ở điểm đó, bạn có thể chỉ cho tôi cách làm điều đó không?
Nghệ thuật Derk

pi*R^2(bề mặt) phải tỷ lệ thuận với số lượng quan sát.
SESman

5
@saratis Điều này sẽ làm những gì bạn muốn:symbols(x=dfx$ev1, y=dfx$ev2, circles=sqrt(dfx$ev3/pi), inches=1/3, ann=F, bg="steelblue2", fg=NULL)
đánh dấu

1
có ý tưởng nào về cách tôi có thể sử dụng điều này để vẽ nhiều chuỗi trên cùng một biểu đồ không? tức là "điểm (x = dfx2 $ ev1, y = dfx2 $ ev2, circle = dfx2 $ ev3, ...)" không hoạt động.
Neodyme 4/2/2015

Trong trường hợp bạn đang tự hỏi "một inch là gì?" xem tại đây
MichaelChirico

22

Như rcs đã nêu, cexsẽ thực hiện công việc trong gói đồ họa cơ sở. Tôi cho rằng bạn không sẵn sàng thực hiện biểu đồ của mình ggplot2nhưng nếu bạn làm vậy, có một sizethuộc tính thẩm mỹ, bạn có thể dễ dàng kiểm soát ( ggplot2có các đối số chức năng thân thiện với người dùng: thay vì nhập cex(mở rộng ký tự), trong đó ggplot2bạn có thể nhập ví dụ size = 2và bạn sẽ nhận được 2 điểm).

Đây là ví dụ:

### base graphics ###
plot(mpg ~ hp, data = mtcars, pch = 16, cex = .9)

### ggplot2 ###
# with qplot()
qplot(mpg, hp, data = mtcars, size = I(2))
# or with ggplot() + geom_point()
ggplot(mtcars, aes(mpg, hp), size = 2) + geom_point()
# or another solution:
ggplot(mtcars, aes(mpg, hp)) + geom_point(size = 2)

4
Và, nếu bạn thực sự đang vẽ hàng chục ngàn điểm, ggplot2 có một số cách khác để làm cho nó trông đẹp hơn - điều chỉnh alpha, thùng hex, lô contour, v.v. Hãy xem trang 72-77 của sách ggplot2, nếu có trong thư viện của bạn hoặc nếu thư viện của bạn có quyền truy cập điện tử vào sách Springer (tôi nghĩ rằng hầu hết các sách R đều ở đó).
Matt Parker

Yup ... Tôi đặc biệt sử dụng alphatrong các biểu đồ phân tán, để tránh hiện tượng quá mức.
aL3xa

@ aL3xa Bạn có thể sử dụng alpha trong gói đồ họa cơ sở. Chỉ cần thêm ví dụ col = rgb(0, 0, 0, 0.6)trong các tùy chọn cốt truyện.
RobJan
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.