我正在嘗試構建一個自定義版本的 scale_color_manual ,它使用我創建的調色板。我有制作和呼叫調色板的功能;但是,我有一種自定義的排序方式,這樣我就可以將整個調色板提供給新的 scale_color 函式。我想知道是否有一種方法可以自動計算繪圖中請求顏色的次數。
這里有一些代碼可以更好地解釋:我有一個調色板生成器函式,看起來有點像這樣:
pals <- list(pal_1 = list(c("red", "blue", "yellow", "orange", "green"), c(1, 5, 3, 2, 4)))
pal_fun <- function(name, n){
pal <- pals[[name]]
pal_return <- pal[[1]][which(pal[[2]] %in% c(1:n)==TRUE)]
return(pal_return)
}
如果我正在使用來自 pal_fun 的顏色構建 ggplot:
library(tidyverse)
ggplot(data=iris, aes(x=Petal.Length, y=Sepal.Length, color=Species))
geom_point()
scale_color_manual(values=pal_fun("pal_1", 3))
我想創建一個自定義 scale_color_manual 函式,它直接使用我的調色板。但是,我需要它來請求 3 種顏色,因為順序很重要。我也不想在我的函式中有一個 n 引數,而只是一種知道需要請求多少顏色的方法。本質上,我需要的是:
scale_color_mine <- function(pal, ...){
#n_ggplot <- CODE TO FIND OUT NUMBER OF COLORS REQUESTED
scale_color_manual(values=pal_fun(pal, n=n_ggplot))
}
然后,我可以簡單地運行:
ggplot(data=iris, aes(x=Petal.Length, y=Sepal.Length, color=Species))
geom_point()
scale_color_mine("pal_1")
我該怎么做呢?
uj5u.com熱心網友回復:
這里的答案是您不需要知道 ggplot 請求多少種顏色。調色板函式的要點是它本身應該回傳一個函式。回傳的函式應采用單個整數引數,即應回傳的顏色數。
與其將外部串列作為顏色的來源,不如將其作為函式中的物件(盡管如果它在函式之外,它仍然可以在此示例中作業)。在這里,我添加了第二組顏色用于演示目的:
library(ggplot2)
pal_fun <- function(name) {
pals <- list(pal_1 = list(c("red", "blue", "yellow", "orange", "green"),
c(1, 5, 3, 2, 4)),
pal_2 = list(c("green4", "cyan3", "violet", "deepskyblue", "gray"),
c(1, 5, 3, 2, 4)))
pal <- pals[[name]]
function(n) pal[[1]][which(pal[[2]] %in% c(1:n))]
}
現在您可以像這樣定義比例函式:
scale_color_mine <- function(pal = "pal_1", ...) {
discrete_scale(aesthetics = "colour", scale_name = "mine",
palette = pal_fun(pal))
}
所以現在你可以這樣做:
ggplot(data=iris, aes(Petal.Length, Sepal.Length, color = Species))
geom_point()
scale_color_mine()

和
ggplot(data=iris, aes(x=Petal.Length, y=Sepal.Length, color=Species))
geom_point()
scale_color_mine(pal = "pal_2")

由
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/444194.html
上一篇:堆積條形圖R頂部的百分比
