首页 文章

ggplot R中的线图与一个数字变量

提问于
浏览
0

我有一个如下所示的数据帧,其中我想在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轴上每个数据点的总事件 .

enter image description here

我尝试使用geom_line()

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

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

1 回答

  • 0

    它可以通过艰难的方式解决:

    您可以使用基本功能 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")
    

相关问题