@baptiste chỉ cho tôi một bài đăng trên bảng thông báo đề cập đến chức năng set_default_scale
có thể được sử dụng để đặt bảng màu mặc định. Tuy nhiên, giải pháp sau chỉ hoạt động với các phiên bản cũ của ggplot2.
Trước tiên, chúng tôi cần một hàm sản xuất tên hoặc mã màu. Tôi gọi tôi magazine.colours
:
magazine.colours <- function(n, set=NULL) {
set <- match.arg(set, c('1', '2'))
palette <- c("red4", "darkslategray3", "dodgerblue1", "darkcyan",
"gray79", "black", "skyblue2", "dodgerblue4",
"purple4", "maroon", "chocolate1", "bisque3", "bisque",
"seagreen4", "lightgreen", "skyblue4", "mediumpurple3",
"palevioletred1", "lightsalmon4", "darkgoldenrod1")
if (set == 2)
palette <- rev(palette)
if (n > length(palette))
warning('generated palette has duplicated colours')
rep(palette, length.out=n)
}
(Nó chấp nhận một tùy chọn set
tranh luận chỉ để chứng minh rằng bạn không bị giới hạn vào một bảng duy nhất.) Ok, bây giờ chúng ta tạo ra một "quy mô", mà tôi gọi là magazine
. Nó dựa trên quy mô bia ggplot và mã là khá xấu xí:
ScaleMagazine <- proto(ScaleColour, expr={
objname <- 'magazine'
new <- function(., name=NULL, set=NULL, na.colour='yellowgreen',
limits=NULL, breaks = NULL, labels=NULL,
formatter = identity, variable, legend = TRUE) {
b_and_l <- check_breaks_and_labels(breaks, labels)
.$proto(name=name, set=set, .input=variable, .output=variable,
.labels = b_and_l$labels, breaks = b_and_l$breaks,
limits= limits, formatter = formatter, legend = legend,
na.colour = na.colour)
}
output_set <- function(.) {
missing <- is.na(.$input_set())
n <- sum(!missing)
palette <- magazine.colours(n, .$set)
missing_colour(palette, missing, .$na.colour)
}
max_levels <- function(.) Inf
})
scale_colour_magazine <- ScaleMagazine$build_accessor(list(variable = '"colour"'))
scale_fill_magazine <- ScaleMagazine$build_accessor(list(variable = '"fill"'))
Điều quan trọng ở đây là xác định output_set
đó là chức năng mà ggplot cuộc gọi để có được tên màu/mã. Ngoài ra, nếu bạn cần thêm đối số, những đối số đó phải được bao gồm trong new
và sau đó có thể được truy cập dưới dạng .$argument_name
. Trong ví dụ trên, output_set
chỉ cần gọi magazine.colours
.
Bây giờ, kiểm tra quy mô mới không thực sự làm việc:
qplot(mpg, wt, data=mtcars, shape=21,
colour=factor(carb), fill=factor(carb)) +
scale_colour_magazine(set='1') +
scale_fill_magazine(set='1')
Để làm cho nó mặc định, chỉ cần sử dụng set_default_scale
.
set_default_scale("colour", "discrete", "magazine")
set_default_scale("fill", "discrete", "magazine")
Và đó sẽ là nó.
> qplot(mpg, wt, data=mtcars, colour=factor(carb), fill=factor(carb))
[này bài đăng] (http://groups.google.com/group/ggplot2-dev/browse_thread/thread/fc838059c281e835?pli=1) sẽ hữu ích. – baptiste
Cảm ơn. Tôi sẽ giữ nó cho sau này, nhưng bây giờ tôi đang mắc kẹt với phiên bản 0.8.9. –