10

我目前是 Plotly 的初学者,有一个我似乎无法解决的问题。我有我的堆积条形图,但我不知道如何为每个单独的类别着色。我目前正在使用 R。

这是我当前的堆积条形图: 在此处输入图像描述

我目前的代码是:

p = plot_ly(x, x = day, y = count, type = "bar", group = status) %>% layout(barmode = "stack", showlegend = T)

我尝试使用"color = "参数和标记,但没有正确着色我的图表。

4

4 回答 4

21

您需要为参数指定一个因子color,然后为参数指定一个颜色向量colors

这是一个简单的解决方案。在绘图之前注意数据框上所需的排序。

require(dplyr)
require(plotly)

set.seed(42)

df <- data.frame(x = rep(LETTERS[1:5], 3), 
                 y = rexp(15, rate = 0.5),
                 z = c(rep("Adam", 5), rep("Arthur", 5), rep("Ford", 5)))
df <- arrange(df, desc(z))

plot_ly(df, 
        x = x, 
        y = y, 
        color = z, 
        colors = c("grey50", "blue", "red"), 
        type = "bar") %>% 
    layout(barmode = "stack")

数据框上的排序很奇怪。我原以为plot_ly会使用级别的顺序,但事实并非如此。

编辑:此示例使用plotly3.xx 如果您使用plotly4.xx 或更高版本,则此代码可能无法按原样工作。有关更多详细信息,请参见此处:https ://www.r-bloggers.com/upgrading-to-plotly-4-0-and-above/

于 2016-02-26T02:30:26.940 回答
4

这可能会有所帮助。请注意,由于某种原因,方法 1 会导致图例条目为黑色。所以我也建议一种解决方法。

library(plotly)
library(dplyr)
library(data.table)

mtcars$color <- factor(mtcars$gear, labels = c("blue", "red", "green"))

# Method 1
# Legend entries are all black
plot_ly(mtcars, x = as.factor(cyl), y = mpg, group = gear, type = "bar", marker = list(color = color), name = "test") %>% 
  layout(barmode = "stack", showlegend = T)

# Method 2
# Workaround
dt <- data.table(mtcars)

p <- dt[gear == 3,] %>% 
  plot_ly(x = factor(cyl), y = mpg, name = "Gear = 3", type = "bar", marker = list(color = "blue"))

p <- dt[gear == 4,] %>% 
  add_trace(x = factor(cyl), y = mpg, name = "Gear = 4", type = "bar", marker = list(color = "red"))

p <- dt[gear == 5,] %>% 
  add_trace(x = factor(cyl), y = mpg, name = "Gear = 5", type = "bar", marker = list(color = "green"))

p <- layout(p, barmode = "stack")

p
于 2016-02-25T05:52:50.510 回答
2

我今天遇到了这个问题,因为我试图为每个单独的标记定义颜色并苦苦挣扎。答案来自其他答案之一,但该答案表示它不适用于这个问题,但它适用于我的问题。

这是 MRE 的要点:https ://gist.github.com/bhive01/d4821f6d73ea0f428767d9bb68fdd404

本质上,不是使用color和/或定义颜色,而是colors使用marker = list(color = ~color). 这假设您有像我这样的数据,其中每个点都有颜色。这对我来说很关键,因为当我使用color = ~Hex, colors = ~Hex颜色时,使用了颜色,但是数据被排序并且颜色与正确的标记不匹配。

于 2017-06-14T19:18:39.203 回答
1

以下是对 plot_ly 语句的一些修改(~和 ~factor()),以使输出与较新版本的 plotly 一起工作。

require(dplyr)
require(plotly)

set.seed(42)

df <- data.frame(x = rep(LETTERS[1:5], 3), 
                 y = rexp(15, rate = 0.5),
                 z = c(rep("Adam", 5), rep("Arthur", 5), rep("Ford", 5)))
df <- arrange(df, desc(z))

plot_ly(df, 
        x = ~x, 
        y = ~y, 
        color = ~factor(z), 
        colors = c("grey50", "blue", "red"), 
        type = "bar") %>% 
  layout(barmode = "stack")

干杯

于 2020-05-02T13:51:01.803 回答