34

色名のベクトルを返す関数を作成しました。

custom.colors <- function(n) {
  palette <- c("dodgerblue1", "skyblue4", "chocolate1", "seagreen4",
               "bisque3", "red4", "purple4", "mediumpurple3",
               "maroon", "dodgerblue4", "skyblue2", "darkcyan",
               "darkslategray3", "lightgreen", "bisque",
               "palevioletred1", "black", "gray79", "lightsalmon4",
               "darkgoldenrod1")
  if (n > length(palette))
    warning('palette has duplicated colours')
  rep(palette, length.out=n)
}

ggplotで上記の関数を使用して、デフォルトでパレットを生成したいと思います。たぶん、個別のスケールの場合のみ。毎回使用scale_manual()するのは大変です。出来ますか?

4

4 に答える 4

20

デフォルトのカラースケールを再定義するには、ggplot関数を再定義することもできます。

ggplot <- function(...) ggplot2::ggplot(...) + scale_color_brewer(palette="Spectral")

同じことがフィルスケールでも機能します。

于 2013-05-08T09:54:13.287 に答える
18

17日前(2020-05-19)のCarson Sievertの作業は、オプション(ggplot2.discrete.fillggplot2.discrete.color)を使用してデフォルトの個別のカラーパレットを指定できるggplot2の開発バージョンにマージされました。

options(ggplot2.discrete.color = c("red", "#af01ef"))

また、異なるサイズの複数のパレットを指定することもできます(使用されるパレットbeiengが十分に小さい場合)。

options(ggplot2.discrete.color = list(c("red", "#af01ef"), custom.colors(99)))

残念ながら、(のようなcustom.colors)パレット関数は使用しませんが、スケール関数は使用します(@ernestAの回答に概説されているように作成して、必要な警告を生成できます)。

ニュースから:

デフォルトの個別のカラースケールは、とを使用して構成できるようoptions()ggplot2.discrete.colourなりggplot2.discrete.fillました。十分な長さのカラーコードの文字ベクトル(または文字ベクトルのリスト)に設定すると、これらの色がデフォルトのスケールに使用されます。詳細help(scale_colour_discrete) と例については、を参照してください(@ cpsievert、#3833)。

于 2020-06-05T13:28:55.617 に答える
8

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))

新しいパレットを示すプロット

于 2012-05-09T01:02:04.110 に答える
6

目的のスケールの名前で変数を割り当てるだけです。

scale_colour_discrete <- function(...)
  scale_colour_manual(..., values = c('dodgerblue1', *))

これは、次のように、可能であればggplotがグローバル環境からデフォルトのスケールを取得するために機能します。

get('scale_colour_discrete', envir = globalenv())
于 2017-06-01T12:09:57.993 に答える