【问题标题】:How to get a "Radial histogram" using R ggplot2 like this?如何像这样使用 R ggplot2 获得“径向直方图”?
【发布时间】:2017-02-28 01:01:07
【问题描述】:

我应该使用 R ggplot2 中的哪个函数来获取此图?

这里的数字“2”和“6”是指具有不同分割角的单元格的数量。

【问题讨论】:

    标签: r histogram radial


    【解决方案1】:

    This 可能是一个更好的答案。也可以使用基本图形来做到这一点,但可能需要更多的工作。这是一个例子。

    d <- structure(list(Angle = c(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 
    100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 
    230, 240, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 250
    ), Frequency = c(0, 0, 0.001, 2, 4, 18.03, 11, 12, 5, 7, 10, 
    13, 2, 0.003, 0.01, 0, 1, 0.05, 2, 3, 3.7, 6, 0, 0, 0, 0, 0.2, 
    0.006, 0, 0, 0, 0, 0, 0, 0, 0)), .Names = c("Angle", "Frequency"
    ), row.names = c(NA, 36L), class = "data.frame")
    
    d$radian = d$Angle*pi/180
    d$x = d$Frequency*cos(d$radian)
    d$y = d$Frequency*sin(d$radian)
    m = max(d$x, d$y)
    graphics.off()
    windows(width = 6, height = 6)
    
    plot(x = m,
        y = m,
        xlim = c(-m,m),
        ylim = c(-m,m),
        type = "n",
        asp = 1,
        axes = FALSE,
        xlab = "",
        ylab = "")
    par(xpd = TRUE)
    
    symbols (x =c(0,0,0,0,0), y = c(0,0,0,0,0), circles=c(3,6,9,12,15), fg = "grey",
                                      add = TRUE, inches = FALSE, lty = 2)
    lines(x = c(-15,15), y = c(0,0), lty = 2)
    lines(x = c(0,0), y = c(-15,15), lty = 2)
    text(x = c(0,0,-15,15), y = c(-15,15,0,0),
                               labels = c("180","0","270","90"), pos = c(1,3,2,4))
    
    for (i in 1:nrow(d)){
        lines(x = c(0,d$x[i]), y = c(0,d$y[i]), lwd = 3)
    }
    

    注意:我在标注角度时搞砸了

    【讨论】:

    • 这真的很酷!但是“线条”怎么会像小扇区一样变成“历史”呢?
    • 对不起@d.b。我的意思是,这张图真的可以代表不同角度的细胞频率。但这是一个折线图而不是直方图。如何制作直方图?我只是更改了 lwd = 8 以使线条看起来像条形图,但它不是直方图。
    • @xiaoyong,我同意。如果你愿意,你可以使用polygon,但它会更复杂。
    猜你喜欢
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2018-04-03
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多