我有一个data.frame
,我正在尝试使用plotly
进行绘制。我想用两个变量进行line
绘制,并根据第三个变量设置标记颜色。以下示例显示了使用mtcars
作为样本数据集的样子。
library(data.table)
library(plotly)
plot_ly(as.data.table(mtcars)[order(wt)]) %>%
add_trace(x = ~wt, y = ~mpg, color = ~vs, type = 'scatter', mode = 'lines+markers')
在我的实际数据集中,如mtcars
中,变量可以采用离散值(0或1)。默认情况下,plotly
将其视为图例中带有颜色条的连续变量。我只想显示与变量可以假定的两个值相对应的两种颜色,而不显示任何颜色条。
我尝试将变量设置为一个因子,但是返回两个折线图,这不是我想要的:
plot_ly(as.data.table(mtcars)[order(wt)]) %>%
add_trace(x = ~wt, y = ~mpg, color = ~as.factor(vs), type = 'scatter', mode = 'lines+markers')
我还尝试根据第三个变量单独设置标记颜色:
plot_ly(as.data.table(mtcars)[order(wt)]) %>%
add_trace(x = ~wt, y = ~mpg, color = ~as.factor(vs), type = 'scatter', mode = 'lines+markers')
这可行,但是我无法指定两个levels
的颜色。我尝试使用marker = list(colors = c('green', 'red', ...)
并没有成功。
总而言之,我想显示两个变量的单一线条图(均匀颜色),其标记设置为我根据第三个变量的值指定的两种离散颜色(无颜色条)。
答案 0 :(得分:0)
一种方法是手动设置每个标记的颜色,如下所示,您可以根据下面的vs
函数中第三个变量recode()
的值来指定颜色。
data <- data.frame(mtcars,stringsAsFactors = F)
data <- data %>%
arrange(wt) %>%
mutate(vs = as.character(vs),
color = recode(vs,`1` = "red",
`0` = "blue"))
plot_ly(data) %>%
add_trace(x = ~wt, y = ~mpg, type = 'scatter', mode = 'lines+markers',
marker = list(color = ~color))