set_default_scale
@baptisteは、デフォルトのパレットを設定するために使用できる機能について言及している掲示板の投稿を私に指摘しました。ただし、次のソリューションは古いバージョンのggplot2でのみ機能します。
まず、色の名前やコードを生成する関数が必要です。私は私のと呼んだ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)
}
set
(単一のパレットに制限されていないことを示すためだけに、オプションの引数を受け入れます。)さて、これで「スケール」を作成します。これをと呼びmagazine
ます。これはggplotのbrewerスケールに基づいており、コードはかなり醜いです:
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"'))
ここで重要なことoutput_set
は、ggplotが色の名前/コードを取得するために呼び出す関数を定義することです。また、追加の引数が必要な場合は、それらを含める必要がありnew
、後でとしてアクセスできます.$argument_name
。上記の例では、output_set
単に。を呼び出しますmagazine.colours
。
ここで、新しいスケールが実際に機能することを確認します。
qplot(mpg, wt, data=mtcars, shape=21,
colour=factor(carb), fill=factor(carb)) +
scale_colour_magazine(set='1') +
scale_fill_magazine(set='1')
これをデフォルトにするには、単に。を使用しますset_default_scale
。
set_default_scale("colour", "discrete", "magazine")
set_default_scale("fill", "discrete", "magazine")
そして、それはそれです。
> qplot(mpg, wt, data=mtcars, colour=factor(carb), fill=factor(carb))