我真的对从R到nvd3-line-chart的数据帧重载功能感到绝望。我的意图是使用nvd3折线图在R Shiny应用程序中显示数据框,如下所示:
https://shiny.rstudio.com/gallery/nvd3-line-chart-output.html
主要问题是,X轴只是一个递增的数字,由重载数据帧的行数给出(如上例所示)。我需要将数据框的第一列作为我的x轴。因此,我想更改代码,实际的目标是将其替换为R2d3函数(R中可用)。
在此示例中,我不了解以下内容:数据框如何重载到预定功能,然后再重载到图表?谁能告诉我一种方法来查看转换函数的输出,并将其替换为手动创建的d3字符串进行测试?
该函数的调用:
output$mychart <- renderLineChart({
df_stocking_catches
})
我不了解的功能。
# To be called from server.R
renderLineChart <- function(expr, env=parent.frame(), quoted=FALSE) {
# This piece of boilerplate converts the expression `expr` into a
# function called `func`. It's needed for the RStudio IDE's built-in
# debugger to work properly on the expression.
installExprFunction(expr, "func", env, quoted)
function() {
dataframe <- func()
mapply(function(col, name) {
values <- mapply(function(val, i) {
list(x = i, y = val)
}, col, 1:nrow(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
list(key = name, values = values)
}, dataframe, names(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
}
}
谢谢您的任何建议。山姆
我找到了解决方案的第一步,方法是将索引x = i
更改为x = dataframe[i,1]
此更改将第一列作为图表的x值
但是,第一行仍然在行图中显示为行,这没有意义……也许任何人都知道如何更改代码以跳过第一行作为行值。
任何想法?
renderLineChart <- function(expr, env=parent.frame(), quoted=FALSE) {
# ...
installExprFunction(expr, "func", env, quoted)
function() {
dataframe <- func()
mapply(function(col, name) {
print(name)
values <- mapply(function(val, i) {
list(x = dataframe[i,1], y = val)
}, col, 1:nrow(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
...
欢呼,知道了!它不是很漂亮,但是完全可以按照我的要求工作。使用了调试功能browser()和print()命令来逐步分析该功能。我现在觉得自己已经很聪明了,但是仍然不明白这段糟糕的代码。
renderLineChart <- function(expr, env=parent.frame(), quoted=FALSE) {
installExprFunction(expr, "func", env, quoted)
function() {
dataframe <- func()
mapply(function(col, name) {
if(name!="Year"){
values <- mapply(function(val, i) {
list(x = dataframe[i,1], y = val)
#browser()
#print(dataframe[i,1])
}, col, 1:nrow(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
list(key = name, values = values)
}
}, dataframe[,-1], names(dataframe[,-1]), SIMPLIFY=FALSE, USE.NAMES=FALSE)
}
}
希望任何人都会从这篇文章中得到启发。再见