2015-10-04 16 views
5

Cách tốt nhất để lưu kiểu ggplot vào đối tượng trong R là gì? Tôi biết ggplot có chủ đề tùy chỉnh, nhưng có rất nhiều thiết kế trực quan không phù hợp với chức năng chủ đề.Lưu trữ các kiểu ggplot tùy chỉnh trong đối tượng

Dưới đây là một số mẫu (nấu chảy) dữ liệu và một đồ thị Tôi đã làm việc trên

library(ggplot2) 

mdf <- structure(list(group = structure(c(2L, 3L, 1L, 2L, 3L, 1L), .Label = c("democrat", 
"founder", "libertarian"), class = "factor"), variable = structure(c(1L, 
1L, 1L, 2L, 2L, 2L), .Label = c("similar", "compete"), class = "factor"), 
    value = c(0.7, 0.2, 0.4, 0.3, 0.8, 0.6)), row.names = c(NA, 
-6L), .Names = c("group", "variable", "value"), class = "data.frame") 

ggplot(mdf, aes (x=group, y=value, fill = variable)) + 
    geom_bar(stat="identity", position="dodge", alpha = 0.8) + 
    geom_bar(stat="identity", position="dodge", color = "#A9A9A9", alpha = 0.8) + 
    scale_fill_manual(values=c("#05f2ae", "#17b0c4")) + 
    geom_text(aes(x=group, y=value, ymax=value, label=value), 
      position=position_dodge(1), vjust=-1, size=12) + 
    coord_cartesian(ylim = c(0, 1)) 
    theme(plot.margin = unit(c(1,1,2,2), "cm"), 
     axis.text.x = element_text(vjust=0.5, size=20), 
     plot.title=element_text(size=20, vjust=2), 
     panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
     axis.title.x = element_blank(), axis.title.y = element_blank(), 
     panel.background = element_rect(fill = "#D9D9D9")) 

Tôi đang tạo ra một đồ thị rất nhiều với thiết kế tương tự và muốn để lưu trữ các thiết kế trong một đối tượng duy nhất, như "plot_style", để biểu đồ được tự động cập nhật với kiểu, ngay cả khi tôi quyết định thay đổi nó sau này.

Nếu tôi cố gắng lưu trữ mọi thứ bên dưới ggplot (...) trong đối tượng "x", tôi gặp lỗi, Error: No layers in plot. Cách tốt hơn để lưu trữ tất cả các yếu tố của một ggplot (trừ các biến/dữ liệu) trong một đối tượng là gì?

Cảm ơn bạn.

+0

Xem '? + .gg'. Ví dụ, bạn có thể gán cốt truyện cơ bản của bạn cho một đối tượng, và sau đó cập nhật cốt truyện của bạn với một khung dữ liệu khác bằng cách sử dụng '% +%'. – Henrik

Trả lời

4

Bạn có thể tạo danh sách tùy chỉnh và sau đó áp dụng điều đó cho từng ô. Ví dụ:

customPlot = list(
    theme(plot.margin = unit(c(1,1,2,2), "cm"), 
     axis.text.x = element_text(vjust=0.5, size=20), 
     plot.title=element_text(size=20, vjust=2), 
     panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
     axis.title.x = element_blank(), axis.title.y = element_blank(), 
     panel.background = element_rect(fill = "#D9D9D9")), 
    coord_cartesian(ylim = c(0, 1)), 
    scale_fill_manual(values=c("#05f2ae", "#17b0c4")) 
) 

ggplot(mdf, aes (x=group, y=value, fill = variable)) + 
    geom_bar(stat="identity", position="dodge", alpha = 0.8) + 
    geom_bar(stat="identity", position="dodge", color = "#A9A9A9", alpha = 0.8) + 
    geom_text(aes(x=group, y=value, ymax=value, label=value), 
      position=position_dodge(1), vjust=-1, size=12) + 
    customPlot 
+0

tuyệt vời. Chỉ vì vậy tôi hiểu, tại sao R chấp nhận một danh sách với các giá trị không xác định, nhưng không được lưu trữ như một đối tượng? có nghĩa là, nếu tôi không áp dụng "list()" cho customPlot, nhưng thay vào đó chỉ cần gán nó qua <-, tôi sẽ gặp lỗi. – tom

+0

Tôi chỉ có kiến ​​thức sơ bộ về những gì 'ggplot' đang làm" dưới mui xe ", nhưng tôi nghĩ đó là bởi vì' ggplot' các đối tượng được lưu trữ dưới dạng danh sách rồi, và trong một số trường hợp nó là biểu thức không được đánh giá được lưu trữ trong danh sách. – eipi10

+0

Nhân tiện, bạn cũng có thể bao gồm các lệnh 'geom_bar' và' geom_text' trong 'customPlot', sau đó tất cả những gì bạn cần để hoàn thành mỗi ô là' ggplot (mdf, aes (x = group, y = value, fill = biến)) + customPlot'. – eipi10

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