r - 如何在情节中为子情节中的所有情节强制使用相同的颜色?
问题描述
在下面的示例中,我在一个情节子图中有四个箱线图。此示例中的四个箱形图中的每一个都有 3 个变量:股票、债券和现金。在每个箱形图中,我希望股票以相同的颜色(例如蓝色)显示,债券以相同的颜色(例如红色)显示,现金以第三种颜色显示。下面的代码使我有 12 种颜色,而不是 3 种。我做了一个简单的例子。在我的实际问题中,变量的数量将在运行时确定,所以我不能轻易地对颜色进行硬编码。我想打电话给调色板。
library(RColorBrewer)
library(plotly)
set.seed(101)
tbl1y <- data.frame(stocks = rnorm(1000,10,15),
bonds = rnorm(1000, 7, 8),
cash = rnorm(1000,3,1))
tbl3y <- data.frame(stocks = rnorm(1000,10,15*0.75),
bonds = rnorm(1000, 7, 8*0.75),
cash = rnorm(1000,3,1*0.75))
tbl5y <- data.frame(stocks = rnorm(1000,10,15*0.5),
bonds = rnorm(1000, 7, 8*0.5),
cash = rnorm(1000,3,1*0.5))
tbl10y <- data.frame(stocks = rnorm(1000,10,15*0.25),
bonds = rnorm(1000, 7, 8*0.25),
cash = rnorm(1000,3,1*0.25))
create_1boxplot <- function(tbl, n, vnames){
mypalette <- brewer.pal(length(vnames), "Dark2")
p <- plot_ly(data = tbl, type="box")
for(i in vnames){
p <- p %>%
add_trace(y = tbl[,i], name = i)
}
a<-list(text=paste("Boxplot of", n, "Year Returns"),
xref = "paper",
yref = "paper",
yanchor = "bottom",
xanchor = "center",
color = vnames,
colors = mypalette,
align = "left",
valign = "top",
x = 0.5,
y = 1,
showarrow = FALSE)
p <- p %>% layout(annotations=a)
return(p)
}
vnames <- c("stocks", "bonds", "cash")
p1 <- create_1boxplot(tbl1y, 1, vnames = vnames)
p3 <- create_1boxplot(tbl3y, 3, vnames = vnames)
p5 <- create_1boxplot(tbl5y, 5, vnames = vnames)
p10 <- create_1boxplot(tbl10y, 10, vnames = vnames)
subplot(p1, p3, p5, p10, titleX=FALSE, titleY=FALSE, nrows=2, margin=0.05) %>%
layout(showlegend = FALSE,
yaxis = list(title = ""),
xaxis = list(title = ""))
解决方案
可以在此处找到解决方案。brewer.pal
简单来说就是函数调用的第一个参数(n)加1 ;并且,添加colorway=mypalette
到函数layout
中的调用。create_1boxplot
推荐阅读
- node.js - 我可以使用 angluar 的平台浏览器在标题中添加脚本吗
- flexbox - 引导网格系统间隙
- c# - 从 c# 打开 SSMS 查询窗口
- shell - 检查日期是否为所需格式或不使用 shell 脚本
- exception - pc 在 armv7a 程序集和 ucontext_t 中的行为
- c - 为什么 Valgrind 会产生这个错误信息?
- javascript - CKEditor 5 中如何在模态中使用
- c# - 页面刷新后如何在浏览器中保存弹出对话?
- okta-signin-widget - sessionCookieRedirect 调用后获取 okta 欢迎页面
- rest - Delphi REST 和 Unicode 字符不存在映射