【问题标题】:Placing the labels in a plot along the x-axis in R将标签放置在 R 中沿 x 轴的图中
【发布时间】:2016-08-05 05:31:43
【问题描述】:

我在 R 中做了一个绘图,现在我想将标签放置在绘图的 x 轴上。我想将标签放在属于特定人群的样本数量的中心。如果我有 5 个样本大小为 10、20、20、35、100 的人口,那么人口 1 的标签应为 10/2,人口 2 的标签应为 20/2,依此类推。我尝试了以下但它不起作用。生病感谢任何进一步的帮助! 我的输入文件的样本(input.5.Q,仅显示 5 个样本。实际上它由 185 行和 5 列组成)

1   0.364957    0.00001 1.00E-05    0.00001 1.00E-05
2   0.485423    0.017426    1.00E-05    0.00001 1.00E-05
3   0.399289    0.00001 1.00E-05    0.002894    1.00E-05
4   0.579652    0.00001 1.00E-05    0.00001 1.00E-05
5   0.578574    0.00001 1.00E-05    0.00001 1.00E-05
6   0.597478    0.00001 1.00E-05    0.00001 1.00E-05

tbl<-read.table(input.5.Q)    
pop<-c("pop1", "pop2", "pop3", "pop4", "pop5")
    n<-c(10, 20,20,35,100)
    at <- n/2
    barplot(t(as.matrix(tbl)),col=rainbow(5),width=1,space=1)
    mtext(1,at=at,text=pop,cex=1, las=2)
    for{....
    }

【问题讨论】:

  • 我正在将混合软件的输出作为 tbl 读入 tbl
  • 在原帖中添加了输入文件的示例。

标签: r plot label


【解决方案1】:

例如,您可以尝试这样的事情(这不是您想要的,但可能足够接近?):

# example data
tbl <- data.frame(population = c(rep("pop1", 10), rep(c("pop2", "pop3"), each = 20), rep("pop4", 35), rep("pop5", 100)), 
              V1 = seq(0, 1, size = 185, replace = TRUE),
              V2 = seq(0, 0.1, size = 185, replace = TRUE),
              V3 = seq(1e-05, 0, size = 185, replace = TRUE),
              V4 = seq(0, 0.01, size = 185, replace = TRUE),
              V5 = seq(1e-05, 0, size = 185, replace = TRUE))


library(gridExtra)
library(grid)
library(ggplot2)
library(lattice)

我为绘图创建了一个函数,以便更轻松地单独绘制每个变量。我也尝试将所有变量放在一个情节中,但结果不是很好 - 太乱了

plot_func <- function(column){
  ggplot(data = tbl, aes_string(x = 1:nrow(tbl), y = column, fill = "population")) + 
    geom_bar(stat = "identity") + 
    theme(axis.title.x = element_blank(), axis.text.x = element_blank(), axis.ticks.x = element_blank()) +
    theme(legend.title = element_blank(), legend.position = "bottom")
}

# run the plot function for each variable and plot
for (i in 2:ncol(tbl)){
  assign(paste("p", i-1, sep = ""), plot_func(column = paste0(colnames(tbl)[i])))
}

grid.arrange(p1, p2, p3, p4, p5, ncol=2)

【讨论】:

    【解决方案2】:

    你可以试试:

    tbl <- read.table("clipboard", row.names= NULL) # read your data
    head(tbl)
    V1       V2       V3    V4       V5    V6
    1  1 0.364957 0.000010 1e-05 0.000010 1e-05
    2  2 0.485423 0.017426 1e-05 0.000010 1e-05
    3  3 0.399289 0.000010 1e-05 0.002894 1e-05
    4  4 0.579652 0.000010 1e-05 0.000010 1e-05
    5  5 0.578574 0.000010 1e-05 0.000010 1e-05
    6  6 0.597478 0.000010 1e-05 0.000010 1e-05
    # the barplot
    colnames(tbl)[-1] <-c("pop1", "pop2", "pop3", "pop4", "pop5")
    barplot(as.matrix(tbl[,-1]),beside = T)
    

    【讨论】:

    • 谢谢金布!但这不是我要找的。在我的输入文件中,前 10 个样本属于 pop1,接下来的 20 个属于 pop2,依此类推。我希望将 pop1 的所有样本放在一起(10 个垂直条),然后将标签放在某处之间,以识别这 10 个样本属于 pop1,同样也属于其他 pop。我得到了情节,但放置标签很难,这就是我正在寻找的帮助。寻找这样的东西journals.plos.org/plosgenetics/article/figure/…
    • @akang 根据您的评论,我更改了答案。我现在希望这可行,否则请编辑您的问题并使您的数据可重现。目前尚不清楚您如何绘制条形图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 2017-07-01
    相关资源
    最近更新 更多