2014-09-16 22 views
5

Sử dụng chức năng pie trong R, các nhãn xuất hiện bên ngoài chiếc bánh. Có cách nào để đặt nhãn bên trong mỗi lát của biểu đồ hình tròn không?R - đặt nhãn bên trong biểu đồ hình tròn

f=table(LETTERS[c(rep(1,7),rep(2,10),rep(3,5))]) 
pie(f) 

Nó hiển thị cách thực hiện điều này với ggplot tại đây place-labels-on-pie-chart. Không có cách nào để làm điều đó với chức năng pie?

Chỉnh sửa: Để trả lời một số nhận xét về việc sử dụng biểu đồ hình tròn, tôi muốn xây dựng ý định của mình với chúng. Tôi thực sự chỉ sử dụng biểu đồ hình tròn như một phần của ma trận phân tán để hình dung toàn bộ khung dữ liệu để hồi quy. Ma trận được thiết lập như sau:

  • hạ tấm
    số tương quan mẫu với nền màu tối hơn cho tương quan tuyệt đối cao hơn.
  • tấm Upper
    • tán xạ cho số bằng số
    • Boxplots cho số bởi yếu tố
  • tấm Diagonal
    • Histograms với mật độ bình thường đối với số
    • Biểu đồ tròn cho yếu tố

Xem, tôi cần một cái gì đó cho các yếu tố trên đường chéo và quyết định trên biểu đồ hình tròn. Tôi quyết định để lại các nhãn ra anyway và mất tất cả các nhãn ghi nhãn là tốt. Tôi sử dụng màu tối hơn cho các lát bánh lớn hơn ... vì vậy có lẽ nó là một cách xấu để hiển thị thông tin nhưng tôi nghĩ nó hoạt động tốt cho một biến yếu tố, cho thấy cách quan sát được cân đối giữa các mức yếu tố tốt hơn so với một barplot sẽ làm. Hình dưới đây mô tả dữ liệu bệnh tiểu đường được đặt trong gói lars.

diabetes data set

Trả lời

4

Tôi không nghĩ rằng có một cách dễ dàng để làm điều này như các vị trí nhãn được mã hoá cứng - nhìn vào cuối

body(pie) 

     if (!is.na(lab) && nzchar(lab)) { 
      lines(c(1, 1.05) * P$x, c(1, 1.05) * P$y) 
      text(1.1 * P$x, 1.1 * P$y, labels[i], xpd = TRUE, 
       adj = ifelse(P$x < 0, 1, 0), ...) 
     } 
    } 
    title(main = main, ...) 
    invisible(NULL) 
} 

Nhưng bạn có thể ghi đè lên phần này của chương trình

# create a new pie function to save overwriting original 
newpie <- pie 

# Tweak the label positions - changed 1.1 to 0.7 
# also commented out the lines function - so that the 
# small lines next to the labels are not plot 
newlbs <- quote(if (!is.na(lab) && nzchar(lab)) { 
        #lines(c(1, 1.05) * P$x, c(1, 1.05) * P$y) 
        text(0.7 * P$x, 0.7 * P$y, labels[i], xpd = TRUE, 
            adj = ifelse(P$x < 0, 1, 0), ...) 
}) 

# add in the new lines of code - trial and error found the right position 
body(newpie)[[22]][[4]][[7]] <- newlbs 

newpie(f) 

Vì vậy, có vẻ ít công việc nhưng nó đến đó và bạn sẽ cần phải làm nhiều hơn một chút để định dạng góc hoặc định dạng văn bản.

(có thể hóa ra có một đối số để làm điều này)

+1

Giải pháp thay thế tốt. Tôi đặt cược thật khó để thay đổi biểu đồ hình tròn vì không ai trong thống kê nên sử dụng biểu đồ hình tròn. ;-) –

+0

chúc mừng Richard, Có, tôi sẽ báo giá trợ giúp '? Pie' - 'Biểu đồ hình tròn là cách rất xấu hiển thị thông tin' – user20650

+0

Mẹo chuyên nghiệp: Bạn có thể sử dụng' đuôi' trên một hàm, tức là 'đuôi (pie, 9) 'tương đương với' body' mà bạn có thể phải cuộn qua. Tất nhiên, bạn vẫn cần 'cơ thể <-' để thay đổi cơ thể. –

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