greenSeriesData <- matrix(c(1,1,NA,NA,1,NA,NA,NA,1), nrow = 3)
redSeriesData <- matrix(c(NA,NA,1,1,NA,NA,NA,NA,NA), nrow = 3)
blueSeriesData <- matrix(c(NA,NA,NA,NA,NA,1,1,1,NA), nrow = 3)
然后,对于每个类别,您需要有一个单独的数据框来保存给定类别的颜色。重要的是,这些数据框不能有列名。
greenColor <- data.frame(x = c(0,1), y = c("#63a803", "#63a803"))
colnames(greenColor) <- NULL
redColor <- data.frame(x = c(0,1), y = c("#a80b03", "#a80b03"))
colnames(redColor) <- NULL
blueColor <- data.frame(x = c(0,1), y = c("#035da8", "#035da8"))
colnames(blueColor) <- NULL
现在,您可以准备绘制图表,并将每个类别指定为单独的曲线:
plot_ly(
type = "heatmap"
) %>% add_trace(
z = greenSeriesData,
colorscale = greenColor
) %>% add_trace(
z = redSeriesData,
colorscale = redColor
) %>% add_trace(
z = blueSeriesData,
colorscale = blueColor
)
如果您想进一步调整图例的外观,您需要为每个追踪添加一个 colorbar
参数:
plot_ly(
type = "heatmap"
) %>% add_trace(
z = greenSeriesData,
colorscale = greenColor,
colorbar = list(
len = 0.3,
y = 1,
yanchor = 'top',
title = 'Green series',
tickvals = ''
)
) %>% add_trace(
z = redSeriesData,
colorscale = redColor,
colorbar = list(
len = 0.3,
y = 1,
yanchor = 'top',
title = 'Red series',
tickvals = ''
)
) %>% add_trace(
z = blueSeriesData,
colorscale = blueColor,
colorbar = list(
len = 0.3,
y = 1,
yanchor = 'top',
title = 'Blue series',
tickvals = ''
)
)
我曾经也遇到过同样的问题,并通过Mikolaj提供的github链接来到这里。对我起作用的第二种简化方法是手动定义colorscale
并且去掉图例(可以手动绘制)。
为了简单起见,我们假设有三个类别(颜色)。
colors <- RColorBrewer::brewer.pal(3, 'Set2')
colorscale
是基于归一化值定义的,因此在这种情况下可以简单地执行以下操作:”colorscale <- list(
list(0, colors[1]),
list(0.5, colors[2]),
list(1, colors[3])
)
(i - 1)/(N - 1)
,其中i是相应的color
索引。
例如:
plot_ly() %>%
add_trace(
type = "heatmap",
data = mtcars %>%
group_by(cyl, gear) %>%
summarise(n = n()) %>%
mutate(cat = 1 + (n > 1) + (n > 10)),
x = ~cyl,
y = ~gear,
z = ~cat,
colorscale = colorscale,
showscale = FALSE
)
library(ggplot2)
library(plotly)
df.team_data <- expand.grid(teams = c("Team A", "Team B", "Team C", "Team D")
,metrics = c("Metric 1", "Metric 2", "Metric 3", "Metric 4", "Metric 5"))
set.seed(41)
df.team_data$performance <- sample(c(0, 1), 20, replace = TRUE)
df.team_data$scores <- sample(c(10, 100), 20, replace = TRUE)
df.team_data$performance<-factor(df.team_data$performance)
col.plot<-c('lightblue','yellow')
gg_team <- ggplot(data = df.team_data, aes(x = metrics, y = teams)) +
geom_tile(aes(fill = performance)) +
geom_text(aes(label = scores)) +
scale_fill_manual(values=col.plot)
ggplotly(gg_team)
这主要是从这个问题中获取的:R: ggplot 热图颜色更改