[英]Plotly: How to customize colors in a donut chart?
我想問你是否可以幫助我在由 plotly 創建的圓環圖中自定義顏色。
問題如下 - 我必須重新創建儀表板(從 excel 文件到 html 文件)。 儀表板的一部分是一個圖表,為我們提供有關每個實體早期生產的信息。 該圖表是由 plotly 繪制的圓環圖類型。 由於每個實體都由整個儀表板中的特定顏色(以 RGB 定義)定義,因此我還需要將這些顏色保留在圓環圖中。 但有一個問題。 我總是收到以下警告:
警告消息:在 RColorBrewer::brewer.pal(N, "Set2") 中:n 太大,調色板 Set2 允許的最大值為 8
並且生成的圓環圖僅包含一個具有未指定顏色的實體(請參見代碼下方的附圖)。 此外,圖例中的顏色不是定義的顏色。
知道該怎么做嗎? 非常感謝你。
# create dataset
dt <- as.data.frame(matrix(ncol = 13, nrow = 19))
colnames(dt) <- c("Entity", month.abb)
for (i in 1:nrow(dt)) {
dt[i, 1] <- paste("Entity", i, sep="")
dt[i, -1] <- floor(runif(12, min=0, max=100))
}
# assign colors to entities
dt$"EntityColor" <- c("#074263", "#0B5394", "#3D85C6", "#6D9EEB", "#A4C2F4", "#CFE2F3", "#5B0F00", "#85200C", "#A61C00", "#CC4125", "#DD7E6B", "#E6B8AF", "#F8CBAD", "#F4CCCC", "#274E13", "#38761D", "#E06666", "#CC0000", "#20124D")
dt
Entity Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec EntityColor
1 Entity1 60 98 88 66 5 4 10 28 96 12 49 36 #074263
2 Entity2 14 0 54 67 55 95 11 67 82 87 54 83 #0B5394
3 Entity3 71 88 61 57 34 84 75 55 67 99 37 95 #3D85C6
4 Entity4 20 29 14 12 31 33 42 88 47 42 73 74 #6D9EEB
5 Entity5 70 77 60 85 59 69 28 14 53 91 2 86 #A4C2F4
6 Entity6 50 12 72 18 38 2 23 98 61 39 70 36 #CFE2F3
7 Entity7 1 69 86 16 73 61 72 43 85 35 87 86 #5B0F00
8 Entity8 64 58 73 80 38 60 18 66 25 29 89 96 #85200C
9 Entity9 36 49 20 15 54 89 62 94 68 38 60 4 #A61C00
10 Entity10 98 11 61 42 58 87 9 20 75 53 13 65 #CC4125
11 Entity11 78 66 34 30 92 2 59 63 9 74 46 29 #DD7E6B
12 Entity12 21 82 14 80 51 66 5 54 4 38 0 20 #E6B8AF
13 Entity13 22 75 68 91 0 77 99 69 46 20 63 63 #F8CBAD
14 Entity14 7 75 31 15 86 65 64 6 20 75 21 45 #F4CCCC
15 Entity15 65 67 42 55 89 11 20 47 2 26 28 62 #274E13
16 Entity16 79 29 68 30 72 98 54 88 47 80 14 67 #38761D
17 Entity17 41 68 7 59 62 70 36 44 44 94 2 63 #E06666
18 Entity18 5 1 25 99 27 49 16 98 40 18 59 24 #CC0000
19 Entity19 11 20 31 62 93 32 67 81 54 12 6 10 #20124D
# create donut chart
dt %>%
mutate(Sum = rowSums(dt[, -c(1,ncol(dt))])) %>%
plot_ly(labels = ~Entity,
values = ~Sum,
textposition = "inside",
textinfo = 'label+percent',
color = ~Entity,
marker = list(color = ~EntityColor)) %>%
add_pie(hole = 0.4) %>%
layout(showlegend = T,
xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = F),
yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = F),
annotations = list(text=sum(rowSums(dt[, -c(1,ncol(dt))])), "showarrow"=F, font=list(size = 40)))
事實證明,您需要in plot_ly()
有type='pie'
,注釋掉color = ~Entity,
並指定marker = list(colors = ~EntityColor)
。
陰謀:
代碼:
dt <- as.data.frame(matrix(ncol = 13, nrow = 19))
colnames(dt) <- c("Entity", month.abb)
for (i in 1:nrow(dt)) {
dt[i, 1] <- paste("Entity", i, sep="")
dt[i, -1] <- floor(runif(12, min=0, max=100))
}
# assign colors to entities
dt$"EntityColor" <- c("#074263", "#0B5394", "#3D85C6", "#6D9EEB", "#A4C2F4", "#CFE2F3", "#5B0F00", "#85200C", "#A61C00", "#CC4125", "#DD7E6B", "#E6B8AF", "#F8CBAD", "#F4CCCC", "#274E13", "#38761D", "#E06666", "#CC0000", "#20124D")
dt %>%
mutate(Sum = rowSums(dt[, -c(1,ncol(dt))])) %>%
plot_ly(labels = ~Entity,
values = ~Sum,
textposition = "inside",
textinfo = 'label+percent',
type='pie',
hole=0.4,
#color = ~Entity,
marker = list(colors = ~EntityColor)
) %>% add_pie(hole = 0.4) %>%
layout(showlegend = T,
xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = F),
yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = F),
annotations = list(text=sum(rowSums(dt[, -c(1,ncol(dt))])), "showarrow"=F, font=list(size = 40)))
我希望這就是你要找的。 如果沒有,請不要猶豫,讓我知道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.