如何在R中为highcharter饼图指定自定义颜色?
在highcharter 0.9.4中通过数据框color列自定义饼图颜色
尝试用以下代码创建饼图时,指定的自定义颜色未生效,反而显示viridis配色:
require(highcharter) hdf=data.frame(count=c(11,15,25),name=c('a','b','c'),color=c('green','red','yellow')) hc=hchart(hdf, 'pie', hcaes(x=name,y=count,color=color), name='Name') hc注:
hc_add_series_labels_values函数已过时,使用的highcharter版本为0.9.4。
问题出在hcaes中对color的映射方式——这里的color会被highcharter当作分类变量,自动套用默认的viridis调色板,而非直接使用你指定的颜色值。要实现自定义颜色,需要将颜色作为每个数据点的属性直接传入,而非通过hcaes映射。
解决方案代码:
require(highcharter) require(purrr) # 用于pmap函数批量处理数据 hdf <- data.frame( count = c(11,15,25), name = c('a','b','c'), color = c('green','red','yellow') ) # 将数据框转换为Highcharts所需的点数据格式 hc <- highchart() %>% hc_add_series( type = "pie", data = pmap(hdf, function(name, count, color) { list(name = name, y = count, color = color) }), name = "Name" ) hc
代码说明:
- 使用
pmap函数遍历数据框每一行,将name(类别)、count(数值)、color(自定义颜色)转换为Highcharts认可的列表格式; - 通过
hc_add_series直接传入包含颜色信息的点数据,每个扇区会直接使用你指定的颜色值; - 无需依赖已过时的
hc_add_series_labels_values函数,符合当前版本使用规范。
无依赖简化写法:
如果不想加载purrr包,可以手动构造数据列表:
hc <- highchart() %>% hc_add_series( type = "pie", data = list( list(name = hdf$name[1], y = hdf$count[1], color = hdf$color[1]), list(name = hdf$name[2], y = hdf$count[2], color = hdf$color[2]), list(name = hdf$name[3], y = hdf$count[3], color = hdf$color[3]) ), name = "Name" )
内容的提问来源于stack exchange,提问作者Noskario
相关产品推荐
相关产品推荐

