2015-04-01 16 views
47

Năm ngoái tôi đã đăng an analysis of user activity to Meta Stack Overflow, bao gồm một loạt biểu đồ ggplot2. Tuy nhiên, Wooble rất xấu hổ cho tôi bằng cách chỉ ra một lỗ hổng chết người với âm mưu của tôi:Làm cách nào để thêm vòng tròn màu đỏ tự do vào biểu đồ ggplot2?

enter image description here

Freehand vòng tròn màu đỏ are of course necessary in any plot on Meta Stack Overflow, nhưng để mất tinh thần của tôi, tôi không thể tìm thấy một cách để thêm chúng vào một đồ thị ggplot2. Tôi biết làm thế nào để add a circle, nhưng như một cấu trúc nhân tạo không có cá tính và sẽ không bao giờ vượt qua muster trên Meta.

Như một ví dụ tái sản xuất, xem xét âm mưu hoạt động này trả lời của riêng tôi theo thời gian, tạo ra bằng cách sử dụng stackr gói:

# devtools::install_github("dgrtwo/stackr") 
library(ggplot2) 
library(dplyr) 
library(lubridate) 
library(stackr) 

answers <- stack_users(712603, "answers", num_pages = 10, pagesize = 100) 
answers_per_month <- answers %>% 
    mutate(month = round_date(creation_date, "month")) %>% 
    count(month) 

ggplot(answers_per_month, aes(month, n)) + geom_line() 

without freehand

âm mưu này là đủ thông tin, nhưng nó không có linh hồn. Làm thế nào tôi có thể thêm vòng tròn màu đỏ tự do vào nó?

+1

Tôi muốn upvote câu hỏi là tốt, nhưng nó có vẻ hơi bất công với hệ thống đánh giá để cung cấp cho điểm hai lần cho cùng một chủ đề :-) –

Trả lời

52

Bạn có thể sử dụng gói ggfreehand của mình, cung cấp lớp geom_freehand bị bỏ qua bất cẩn từ ggplot2.

Ví dụ, nếu bạn muốn khoanh tròn hai tháng tích cực nhất đầu trong cốt truyện trên, bạn có thể làm theo các mã với:

top_2_months <- answers_per_month %>% top_n(2) 

library(ggfreehand) 
ggplot(answers_per_month, aes(month, n)) + geom_line() + 
    geom_freehand(data = top_2_months) 

with freehand

Và cũng giống như thế, cốt truyện là bây giờ xứng đáng được đăng trên Meta Stack tràn.

Lớp geom_freehand có các tùy chọn bổ sung để tùy chỉnh vòng tròn, bao gồm radiusnoisiness. Bạn cũng có thể làm cho vòng tròn không đỏ, như thể đó là thứ bạn muốn làm.

p <- ggplot(answers_per_month, aes(month, n)) + geom_line() 

p + geom_freehand(data = top_2, radius = .5) 
p + geom_freehand(data = top_2, noisiness = 10) 
p + geom_freehand(data = top_2, noisiness = 1) 
p + geom_freehand(data = top_2, color = "blue") 

enter image description here

+9

OT nhận xét. (Tôi đã upvote.) Một trong những thứ mà gói ggplot2 thiếu là một trang trợ giúp đầy đủ cho '? Layer'. Nó đặc biệt khó chịu khi có quá nhiều liên kết trong các trang trợ giúp khác trỏ đến trang đó. Bạn rõ ràng hiểu mô hình lớp ggplot2. Bây giờ bạn đã lóa mắt và thích thú với chúng tôi, tôi có thể yêu cầu rằng chi phí tiếp theo của bạn lãng phí thời gian là một trình của một trang lớp mở rộng? –

+0

Đừng quên sử dụng 'set.seed' để tạo hình dạng vòng tròn tự do của bạn * không thể sản xuất *:' set.seed (mẫu (0: .Machine $ integer.max, size = 1)) '. (Hãy chắc chắn rằng bạn có đủ bộ nhớ, hoặc người nào khác sử dụng thay thế bộ nhớ thấp này: 'set.seed (as.integer (runif (1, 0, .Machine $ integer.max)))'.) –

+0

@RyanThompson nhưng đã thắng 't làm việc! Nếu người dùng đặt hạt giống trước đó, hoạt động 'mẫu' đó trở thành xác định và nó vẫn có thể tái sản xuất! (Thay vào đó, bạn có thể đặt nó vào thời điểm hiện tại!) –

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