ggplot是否对统计函数使用动态函数?

时间:2016-06-13 21:42:46

标签: r function ggplot2 stat

所以我正在运行优化问题,并尝试在每个时间点添加函数到绘图。我能够绘制函数,但是我已经存储了变量,看起来r并没有评估函数,直到它呈现它为止。这很难解释,但我有一个简单的例子来说明它。

$(document).ready(function() {
$.get (
"https://www.googleapis.com/youtube/v3/channels?id=UC-9-kyTW8ZkZNDHQJ6FgpwQ&key=AIzaSyCKhEoBd9nZsMAC77NKQqf403mXnXTz35s&part=snippet,contentDetails",
function(data) {
    $.each(data.items, function(i,item) {
        console.log(item);
        pid = item.contentDetails.relatedPlaylists.uploads;

        getVids(pid);
    })
 }
 );

 function getVids(pid) { 
    $.get(
        "https://www.googleapis.com/youtube/v3/playlistItems", {
            part:'snippet',
            maxResults: 5,
            playlistId: pid,
            key: 'AIzaSyCKhEoBd9nZsMAC77NKQqf403mXnXTz35s'
        },

            function(data) {
                var output;
                $.each(data.items, function(i,item) {
                    console.log(item);
                    videTitle = item.snippet.title;

                    output = '<li>'+vidsTitle+'</li>'
                    $('#results').append(output);
                })
            }
        )
}
});

我想要的是图表上的两条线,我将该函数添加到图形时具有斜率和y轴截距。

3 个答案:

答案 0 :(得分:0)

使用时会评估一个函数,因此在渲染时就是这样。 您可以重命名参数以具有不同的功能:

p <- ggplot(data, aes(x = x, y =y))
slope1 = 0.5
yoff1 = 1
p <- p + stat_function(fun = function(x) slope1*x+yoff1)
slope2 = 1
yoff2 = -1
p <- p + stat_function(fun = function(x) slope2*x+yoff2)

答案 1 :(得分:0)

在实际渲染绘图之前,不会评估ggplot中的许多参数。在这里,我们可以为函数创建slopeyoff值参数,然后通过先前评估的args=参数传入值。

library(ggplot2)
data = data.frame(x = runif(20, -10, 10), y = runif(20, -10,10))
p <- ggplot(data, aes(x = x, y =y))
slope = 0.5
yoff = 1
p <- p + stat_function(fun = function(x, slope, yoff) slope*x+yoff, args=list(slope=slope, yoff=yoff))
slope = 1
yoff = -1
p <- p + stat_function(fun = function(x, slope, yoff) slope*x+yoff, args=list(slope=slope, yoff=yoff))
p

答案 2 :(得分:0)

如果你有很多,请列出一些功能:

make_fun <- function(slope,yoff) {slope; yoff; function(x) x*slope + yoff}
> l <- mapply(FUN = make_fun,slope = 1:2,yoff = 3:4)
> l[[1]](1)
[1] 4
> l[[2]](1)
[1] 6