首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mschart:如何向mschart传递列名和颜色的动态列表

mschart:如何向mschart传递列名和颜色的动态列表
EN

Stack Overflow用户
提问于 2019-08-16 01:18:44
回答 1查看 104关注 0票数 0

在下面的代码中,我生成了一些随机数据。我希望将其传递给一个函数进行绘图,但又希望能够通过参数控制外观。例如,我想控制线条的颜色,但mschart输出的是红色和蓝色线条。这不是我想要的。我希望它像图表的其余部分一样以编程方式设置(标题,x轴等)。

代码语言:javascript
复制
####  GENERATE RAW AND RANDOM DATA


DT<-data.table(x=1:10,y=1:10, group=c(1))
DT<-rbind(DT,data.table(x=1:10,y=(1:10)**2, group=c(2)))

generate_chart <-
  function(DT,x, y, group_by_col, xlab, ylab, title, num_format,color_list)
  {
    rr_chart <-
      ms_linechart(DT,
                   x = x,
                   y = y,
                   group = group_by_col)

    groups<-unique(DT[,get(group_by_col),]  )     

    #TRY TO GENERATE LIST FOR COLORS  from what is input

    l<-list()
    for(i in 1:length(groups)){
     l[[groups[i]]]<-color_list[i]

    }

# Standatd code where the list above is used to color the data

    rr_chart <-
      chart_ax_x(
        rr_chart,
        minor_tick_mark = 'none',
        major_tick_mark = 'none'
      ) %>% chart_labels(title = title,
                         xlab = xlab,
                         ylab = ylab)  %>% chart_ax_y(num_fmt = num_format) %>% chart_data_stroke(
                           l
                         ) 

   rr_chart <- set_theme(rr_chart, crm_chart_theme) 

  }


# call function
  x<-generate_chart(DT,x="x", y="y", group_by_col="group", xlab="xxxx", ylab="yyyy", title="Title", num_format="#0.0",color_list=c('red','black'))

#Add to slide
# blank because of missing template
EN

回答 1

Stack Overflow用户

发布于 2019-08-16 06:33:47

颜色列表l的元素需要正确的名称。它们必须是属于这两行的名称(在您的示例中为12 )。将names(l) <- 1:2添加到代码中,现在可以通过编程方式设置线条颜色。

代码语言:javascript
复制
library(mschart)
library(data.table)
library(dplyr)

generate_chart <- function(DT, x, y, group_by_col, xlab, ylab, title, 
                           num_format, color_list) {
  rr_chart <- ms_linechart(DT, x=x, y=y, group=group_by_col)
  groups <- unique(DT[,get(group_by_col),]  )     
  l <- list()
  for (i in 1:length(groups)) {
    l[[groups[i]]] <- color_list[i]
  }
  # Set Names for elements of the color list
  names(l) <- 1:2
  ###      
  rr_chart <-
    chart_ax_x(rr_chart, minor_tick_mark = 'none', major_tick_mark = 'none') %>% 
    chart_labels(title = title, xlab = xlab, ylab = ylab)  %>% 
    chart_ax_y(num_fmt = num_format) %>% 
    chart_data_stroke( values=l ) 
  rr_chart <- set_theme(rr_chart, crm_chart_theme)       
}

DT <- data.table(x=1:10, y=1:10, group=c(1))
DT <- rbind(DT,data.table(x=1:10, y=(1:10)**2, group=c(2)))
x <- generate_chart(DT, x="x", y="y", group_by_col="group", 
                    xlab="xxxx", ylab="yyyy", title="Title", 
                    num_format="#0.0", color_list=c('red','black'))    
print(x, preview=T)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57513582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档