首页 > 解决方案 > 根据data.frame列在散点图中设置标记颜色

问题描述

我有一个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', ...)没有任何成功。

在此处输入图像描述

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

标签: rplotly

解决方案


一种方法是手动设置每个标记的颜色,如下所示,您可以根据下面函数中第三个变量的值指定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))


推荐阅读