2016-09-22 114 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