簡體   English   中英

Plotly:如何自定義圓環圖中的顏色?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM