我配置了csv导入功能来显示图形。导入后,我选择定义X,Y和Groupby的列。根据我导入的CSV,ID字段可以是数字或字符。使用此功能,当我导入包含字符ID的CSV时显示的图形是正确的,但是当它包含数字ID时导入的图形却不正确。
这是我的代码:
#-------- REACTIVE DATA --------#
data <- reactive({
req(input$csv_chart)
infile <- input$csv_chart
if (is.null(infile))
return(NULL)
df <- read_csv(infile$datapath)
updateSelectInput(session, inputId = 'X', label = 'Field X:',
choices = names(df), selected = names(df)[1])
updateSelectInput(session, inputId = 'Y', label = 'Field Y:',
choices = names(df), selected = names(df)[2])
updateSelectInput(session, inputId = 'group', label = 'Group by:',
choices = names(df), selected = names(df)[3])
return(df)
})
#-------- PLOT CHART --------#
output$plot <- renderPlot({
ggplot(data()) +
geom_line(mapping = aes_string(x = input$X, y = input$Y, color= input$group)) +
labs(x = input$X, y = input$Y, title = "Index Values")
})
我尝试的是在ggplot函数中添加“ as.character”,但它什么都没有改变:
geom_line(mapping = aes_string(x = input$X, y = input$Y, color= as.character(input$group))) +
答案 0 :(得分:0)
使用ggplot
而不是aes
重写aes_string
命令应该可以解决问题。
ggplot(data()) +
geom_line(mapping = aes(x = get(input$X), y = get(input$Y), color = as.character(get(input$group))))
原因是:在aes_string
中,您呼叫input$group
只是一个字符串。 as.character()
在这里毫无意义,因为它将变量名的字符串转换为字符串。
但是,使用aes
,您可以使用get()
访问变量名称后面的实际数据。然后,您可以根据这些数据使用as.character()
将其转换为字符串。