Question

I try to build a chart using rCharts and polychart frontend:

dtf <- data.frame(x=c(1, 2, 3, 4, 5), y=c(4, 5, 6, 3, 5), 
              label=c('one', 'two', 'one', 'two', 'two'))
color.mapping <- list(one='#ff2385', two='#229922')
p2 <- rPlot(x='x', y='y', data=dtf, type='point', color='label')
print(p2)

I would like to have a control over the point colors by either using some sort of discrete mapping (like in the example above) or using some other logic. How is that done

EDIT

following the Ramnath's answer I tried to do the following, but I get an empty page:

dtf <- data.frame(x=c(1, 2, 3, 4, 5), y=c(4, 5, 6, 3, 5), 
                  label=c('one', 'two', 'one', 'two', 'two'))

p2 <- rPlot(x='x', y='y', data=dtf, type='point', color='label')

p2$guides(color = list(scale = "#! function(value){
   color_mapping = {one: '#ff2385', two: '#229922'}
   return color_mapping[value];                  
 } !#"))


print(p2)

Resolution upgrading rCharts from github has solved the problem.

Was it helpful?

Solution

This is a little complicated in Polychart currently, although we are trying to create a more R friendly solution. But for now, here is the way to set custom scales in Polychart

p2$guides(color = list(scale = "#! function(value){
  color_mapping = {one: '#ff2385', two: '#229922'}
  return color_mapping[value];                  
} !#"))

The idea is to set a scale for the color aesthetic. But instead of using a color palette, you specify a function, which returns a color based on the mapping. You need to wrap the function between #! and !# so that rCharts treats it as a JS literal, and does not stringify it when converting to JSON.

If you are unsure how to specify color_mapping in JSON, you can use the function toJSON to convert your R object. Only caveat is avoid using double quotes inside the function, as they tend to get escaped and as a result cause errors.

Hope this was useful.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top