在 ggplotly 中使用 alpha 和手动颜色
Using alpha and manual colours with ggplotly
我在使用 ggplotly
设置手动颜色时遇到困难。
library(ggplot2)
library(plotly)
set.seed(1)
data.frame(x = 1:10, y = rnorm(10)) %>%
ggplot(aes(x, y, fill = factor(x > 5), alpha = y)) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("red", "blue"))
ggplotly()
我收到错误:
Error in setNames(as.numeric(x), c("red", "green", "blue", "alpha")) :
'names' attribute [4] must be the same length as the vector [1]
带追溯:
14: setNames(as.numeric(x), c("red", "green", "blue", "alpha"))
13: FUN(X[[i]], ...)
12: lapply(X = X, FUN = FUN, ...)
11: sapply(valz, function(x) {
x <- setNames(as.numeric(x), c("red", "green", "blue", "alpha"))
x[["alpha"]] <- x[["alpha"]] * 255
do.call(grDevices::rgb, c(x, list(maxColorValue = 255)))
})
10: rgb2hex(x[idx])
9: toRGB(aes2plotly(data, params, "fill"), aes2plotly(data, params,
"alpha"))
8: geom2trace.GeomBar(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]])
7: (function (data, params, p)
{
UseMethod("geom2trace")
})(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]])
6: mapply(FUN = f, ..., SIMPLIFY = FALSE)
5: Map(geom2trace, dl, paramz[i], list(p))
4: layers2traces(data, prestats_data, panel$layout, p)
3: gg2list(p, width = width, height = height, tooltip = tooltip,
source = source)
2: ggplotly.ggplot()
1: ggplotly()
使用 ggplotly
时设置 alpha 和 fill/colour 的正确方法是什么?如果未使用 alpha
或未手动设置颜色,则不会出现此错误。
我认为 alpha = y
才是问题所在。
library(plotly)
# Generate sample data
df <- data.frame(x = 1:10,
y = sample(1:5, size = 10, replace = T),
col = sample(LETTERS[1:4], size = 10, replace = T))
第一个 geom_point(工作正常)
# ggplot2 syntax
ggplot(df, aes(x, y, color = col, alpha = y)) +
geom_point()
ggplotly()
下一个geom_bar(休息)
ggplot(df, aes(x, y, fill = col, alpha = y)) +
geom_bar(stat = "identity")
ggplotly()
改为使用 alpha 作为因子修改 geom_bar(有效)
ggplot(df, aes(x, y, fill = col, alpha = factor(y))) +
geom_bar(stat = "identity")
ggplotly()
我认为这与 plotly.js
有关。当 alpha
被指定为一组离散值时,每个条形图被绘制为 单独的轨迹 ,整个轨迹具有指定的 alpha 值,而不是特定标记。
我认为条形图目前不支持一组连续的 alpha 值,因为它确实适用于散点图。
希望这对您有所帮助...
我在使用 ggplotly
设置手动颜色时遇到困难。
library(ggplot2)
library(plotly)
set.seed(1)
data.frame(x = 1:10, y = rnorm(10)) %>%
ggplot(aes(x, y, fill = factor(x > 5), alpha = y)) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("red", "blue"))
ggplotly()
我收到错误:
Error in setNames(as.numeric(x), c("red", "green", "blue", "alpha")) :
'names' attribute [4] must be the same length as the vector [1]
带追溯:
14: setNames(as.numeric(x), c("red", "green", "blue", "alpha"))
13: FUN(X[[i]], ...)
12: lapply(X = X, FUN = FUN, ...)
11: sapply(valz, function(x) {
x <- setNames(as.numeric(x), c("red", "green", "blue", "alpha"))
x[["alpha"]] <- x[["alpha"]] * 255
do.call(grDevices::rgb, c(x, list(maxColorValue = 255)))
})
10: rgb2hex(x[idx])
9: toRGB(aes2plotly(data, params, "fill"), aes2plotly(data, params,
"alpha"))
8: geom2trace.GeomBar(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]])
7: (function (data, params, p)
{
UseMethod("geom2trace")
})(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]])
6: mapply(FUN = f, ..., SIMPLIFY = FALSE)
5: Map(geom2trace, dl, paramz[i], list(p))
4: layers2traces(data, prestats_data, panel$layout, p)
3: gg2list(p, width = width, height = height, tooltip = tooltip,
source = source)
2: ggplotly.ggplot()
1: ggplotly()
使用 ggplotly
时设置 alpha 和 fill/colour 的正确方法是什么?如果未使用 alpha
或未手动设置颜色,则不会出现此错误。
我认为 alpha = y
才是问题所在。
library(plotly)
# Generate sample data
df <- data.frame(x = 1:10,
y = sample(1:5, size = 10, replace = T),
col = sample(LETTERS[1:4], size = 10, replace = T))
第一个 geom_point(工作正常)
# ggplot2 syntax
ggplot(df, aes(x, y, color = col, alpha = y)) +
geom_point()
ggplotly()
下一个geom_bar(休息)
ggplot(df, aes(x, y, fill = col, alpha = y)) +
geom_bar(stat = "identity")
ggplotly()
改为使用 alpha 作为因子修改 geom_bar(有效)
ggplot(df, aes(x, y, fill = col, alpha = factor(y))) +
geom_bar(stat = "identity")
ggplotly()
我认为这与 plotly.js
有关。当 alpha
被指定为一组离散值时,每个条形图被绘制为 单独的轨迹 ,整个轨迹具有指定的 alpha 值,而不是特定标记。
我认为条形图目前不支持一组连续的 alpha 值,因为它确实适用于散点图。
希望这对您有所帮助...