【问题标题】:Line graph in ggplot R with one numeric variableggplot R中带有一个数值变量的折线图
【发布时间】:2016-06-10 17:43:04
【问题描述】:

我有一个如下所示的数据框,其中我想在 X 轴上绘制“FREQ”值作为 TYPE 中每个类的折线图,在 Y 轴上显示总计数

ID     FREQ    TYPE
ID1    0.0827068    A
ID2    0.0827068    A
ID3    0.0150376    B
ID4    0.0075188    B
ID5    0.07838      C
ID6    0.0676692    C

我设法用以下命令绘制了一个直方图:

ggplot(CNV.sort1, aes(x = FREQ,y=..density..,fill=TYPE)) + geom_histogram()

geom_line

但是,我需要一个折线图,其中 X 轴中断如下所示,以及 Y 轴上每个数据点的总事件数。

我尝试使用 geom_line()

ggplot(CNV.sort1, aes(x = FREQ,y=..density..,fill=TYPE)) + geom_line()
Error in eval(expr, envir, enclos) : object 'density' not found

我错过了一些东西来获得折线图。提供的任何线索都会有所帮助!

【问题讨论】:

    标签: r ggplot2 linegraph


    【解决方案1】:

    可以通过困难的方式解决:

    您可以使用基本函数hist() 并输入其槽:

    h <- hist(rnorm(1000,1,10)) 
    

    直方图可能有精确的断点 xlim 等等,所以它们会让你满意。然后您可以使用str() 查看其插槽并进行访问。

    插槽h$breaks 比您感兴趣的插槽h$countsh$density 长,因此您需要手动调整它们。

    当你得到正确的向量时,你可以用线法绘制它们。它可能是ggplot或base:

    plot(vector1, vector2, type = "l")
    

    正如我所说,这是一个相当困难的方法。最好有一个功能,但如果没有提供更好的答案 - 这可能会奏效。也可以随时询问您是否需要分步指南。

    编辑:

    这是执行上述操作的代码:

    # creating sample data frame:
    ID <- paste0("ID", 1:1000)
    FREQ <- rnorm(1000, 0.5, 0.1)
    TYPE <- sample(c("A", "B", "C"), size = 1000, replace = T)
    d <- data.frame(ID, FREQ, TYPE)
    head(d)
    
    # creating histogram and entering slots:
    h <- hist(d$FREQ[d$TYPE == "A"])
    str(h)
    
    # geting and adjusting needed vectors:
    counts = h$counts
    values = h$breaks[2:length(h$breaks)] - 0.5 * (h$breaks[2] - h$breaks[1])
    
    # plotting histogram with line:
    plot(values, counts, type = "l")
    

    【讨论】:

    • 谢谢!! 不能按照困难的方式。任何基于输入数据框的解决方案都有助于更好地理解!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多