2016-09-22 95 views
1

我想在highcharts有光泽的R中创建一个散点图,但我需要分别给点不同的颜色。考虑下面的例子:Highchart有光泽的R散点图 - 如何定义个别点颜色

library("MASS") 

dscars <- round(mvrnorm(n = 20, mu = c(1, 1), Sigma = matrix(c(1,0,0,1),2)), 2) 


highchart() %>% 
    hc_chart(type = "scatter", zoomType = "xy") %>% 
    hc_tooltip(
    useHTML = TRUE, 
    pointFormat = paste0("<span style=\"color:{series.color};\">{series.options.icon}</span>", 
         "{series.name}: <b>[{point.x}, {point.y}]</b><br/>") 
) %>% 
    hc_add_series(data = list.parse2(as.data.frame(dscars)), 
       marker = list(symbol = fa_icon_mark("car")), 
       icon = fa_icon("car"), name = "car") 

我的目标是给这20点,一个独特的颜色。

我试图设置标记列表中的“fillColor”以及定义该系列的颜色,这两个颜色都带有20种颜色的矢量,但我没有成功。

任何人都可以给我一个提示吗? 谢谢

回答

0

在highcharts(该highcharter)的点可以作为其他参数,相同的x和y。因此,首先

library("MASS") 

dscars <- round(mvrnorm(n = 20, mu = c(1, 1), Sigma = matrix(c(1,0,0,1),2)), 2) 
dscars <- as.data.frame(dscars) 
names(dscars) <- c("x", "y") # it's better give a named list IMHO 
dscars$color <- colorize(1:nrow(dscars)) 

colorize是创建给其他载体颜色向量函数。在这种情况下,输入向量是一个序列(不重复),所以输出将是不同的颜色。但是如果你想让你可以使用自己的颜色。

highchart() %>% 
hc_chart(type = "scatter", zoomType = "xy") %>% 
hc_tooltip(
    useHTML = TRUE, 
    pointFormat = paste0("<span style=\"color:{point.color};\">{series.options.icon}</span>", 
        "{series.name}: <b>[{point.x}, {point.y}]</b><br/>") 
) %>% 
    hc_add_series(data = list_parse(dscars), 
       marker = list(symbol = fa_icon_mark("car")), 
       icon = fa_icon("car"), name = "car") 

注意,我们使用:

  • color:{point.color};在poinFormat,怎么一回事,因为每一个点在颜色accesor自己的颜色。
  • 我用list_parse解析数据框在命名列表而不是未命名的列表,所以highcharts理解如何使用数据。 list_parse与旧版本的高图相同list.parse3

希望它有帮助。 enter image description here

0

这是你想要的吗?

rm(list = ls()) 
library(highcharter) 
library(MASS) 
dscars <- data.frame(round(mvrnorm(n = 20, mu = c(1, 1), Sigma = matrix(c(1,0,0,1),2)), 2)) 

highchart() %>% 
    hc_chart(type = "scatter", zoomType = "xy") %>% 
    hc_tooltip(
    useHTML = TRUE, 
    pointFormat = paste0("<span style=\"color:{colorByPoint:true};\">{series.options.icon}</span>", 
         "{series.name}: <b>[{point.x}, {point.y}]</b><br/>") 
) %>% 
    hc_add_series(data = list.parse2(as.data.frame(dscars)),colorByPoint = TRUE, 
       marker = list(symbol = fa_icon_mark("car")), 
       icon = fa_icon("car"), name = "car") 

enter image description here

+1

小心使用colorByPoint,它使用主题的当前颜色。所以如果点数多于当前主题的颜色,会有重复的颜色。 – jbkunst

+1

我想做一点JS,但不得不回家:( –

+0

@PorkChop如何选择每个点的颜色? – hsilva