根据data.frame列在绘图散点图中设置标记颜色

时间:2019-07-03 15:49:46

标签: r plotly

我有一个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')

输出看起来像: enter image description here

在我的实际数据集中,如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')

enter image description here

我还尝试根据第三个变量单独设置标记颜色:

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', ...)并没有成功。

enter image description here

总而言之,我想显示两个变量的单一线条图(均匀颜色),其标记设置为我根据第三个变量的值指定的两种离散颜色(无颜色条)。

1 个答案:

答案 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))