R Plotly中的自定义颜色
custom colors in R Plotly
我目前是 Plotly 的初学者,有一个我似乎无法解决的问题。我有我的 plotly 堆叠条形图,但我不知道如何为每个单独的类别着色。我目前正在使用 R.
这是我当前的堆积条形图:
我当前的代码是:
p = plot_ly(x, x = day, y = count, type = "bar", group = status) %>% layout(barmode = "stack", showlegend = T)
我试过使用 "color = "
参数和标记,但没有正确地为我的图表着色。
以下内容可能会有所帮助。请注意,由于某种原因,方法 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
您需要为 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
会使用级别的顺序,但事实并非如此。
编辑:
此示例使用 plotly
3.x.x。如果您使用 plotly
4.x.x 或更高版本,此代码可能无法正常工作。详情请看这里:https://www.r-bloggers.com/upgrading-to-plotly-4-0-and-above/
我今天遇到了这个问题,因为我试图为每个单独的标记定义颜色并且很费劲。答案来自其他答案之一,但那个答案说它不适用于这个问题,但它适用于我的。
这是 MRE 的要点:https://gist.github.com/bhive01/d4821f6d73ea0f428767d9bb68fdd404
本质上,不是使用 color
and/or colors
定义颜色,而是使用 marker = list(color = ~color)
。这假设您有像我这样的数据,其中每个点都有一种颜色。这对我来说很重要,因为当我使用 color = ~Hex, colors = ~Hex
时,颜色被使用了,但是数据被排序并且颜色与它们的正确标记不匹配。
此处对 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")
干杯
我目前是 Plotly 的初学者,有一个我似乎无法解决的问题。我有我的 plotly 堆叠条形图,但我不知道如何为每个单独的类别着色。我目前正在使用 R.
这是我当前的堆积条形图:
我当前的代码是:
p = plot_ly(x, x = day, y = count, type = "bar", group = status) %>% layout(barmode = "stack", showlegend = T)
我试过使用 "color = "
参数和标记,但没有正确地为我的图表着色。
以下内容可能会有所帮助。请注意,由于某种原因,方法 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
您需要为 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
会使用级别的顺序,但事实并非如此。
编辑:
此示例使用 plotly
3.x.x。如果您使用 plotly
4.x.x 或更高版本,此代码可能无法正常工作。详情请看这里:https://www.r-bloggers.com/upgrading-to-plotly-4-0-and-above/
我今天遇到了这个问题,因为我试图为每个单独的标记定义颜色并且很费劲。答案来自其他答案之一,但那个答案说它不适用于这个问题,但它适用于我的。
这是 MRE 的要点:https://gist.github.com/bhive01/d4821f6d73ea0f428767d9bb68fdd404
本质上,不是使用 color
and/or colors
定义颜色,而是使用 marker = list(color = ~color)
。这假设您有像我这样的数据,其中每个点都有一种颜色。这对我来说很重要,因为当我使用 color = ~Hex, colors = ~Hex
时,颜色被使用了,但是数据被排序并且颜色与它们的正确标记不匹配。
此处对 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")
干杯