【问题标题】:ggplot2 with rbind get error : Error in rep(value[[k]], length.out = n)带有rbind的ggplot2得到错误:rep中的错误(值[[k]],length.out = n)
【发布时间】:2018-01-10 22:36:51
【问题描述】:

我正在尝试制作一个 ggplot。这是我的代码:-

ggplot(Barfig4, aes(treatment, backtransformed))+ 
         geom_bar(stat="identity", position="dodge", fill=I(col), width=0.5,size=5) +
  facet_grid(treatment~., scales="free_y") +
    geom_errorbar(aes(ymin=lower, ymax=upper),width=0,size=0.5)+ 
  theme_few(base_size=14) + # adjust font size as desired
    theme(legend.position="none") + 
  theme( axis.line = element_line(colour = "black", size = 1, linetype = "solid"), 
         axis.text = element_text(size = 12, colour="black"), # adjust size if you like
         panel.border = element_rect(colour = "black", fill=NA, size=1),
         axis.ticks = element_line(size = 1, colour="black")) +
  theme(axis.text.x=element_text(angle=30,hjust=1))

这给出了错误:-

rep(value[[k]], length.out = n) 中的错误: 尝试复制“闭包”类型的对象

我需要这样的东西:-

enter image description here 这就是我的 ggplot2 的样子。 我已经为此工作了一个星期,所以请帮忙:(

这是 Barfig4 的代码:-

Barfig4<-rbind(mating,courting)
Barfig4
Barfig4$treatment=factor(Barfig4$treatment,levels=c("control","9-tricosene","tricosane","7-tricosene","5-tricosene","2-methyloctacosane","heneicosane")) # specify desired order here
Barfig4$treatment=relevel(Barfig4$treatment,ref="control")

    upper = Barfig4$backtransformed+Barfig4$backtransformed_upper_limit # the upper limits
    upper
    lower = Barfig4$backtransformed-Barfig4$backtransformed_lower_limit # the lower limits
    lower

这是 Barfig4 的结果: [在此处输入图片描述][2]

请帮忙:(

> dput(droplevels(head(Barfig4, 14)))

structure(list(treatment = structure(c(NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_), .Label = character(0), class = "factor"), 
    estimate = c(-1.5971447802041, 1.08631915643811, -1.53834934761002, 
    -0.348765368851216, -0.800750492594197, -0.0122931322300098, 
    0.70984158520319, 0.177651783720163, 0.450956875702216, -0.522492270011893, 
    -0.522492270011882, -0.311183176344688, -0.0976090760466224, 
    0.333173840045831), std = c(0.240595524143666, 0.429965502362798, 
    0.896062660341878, 0.574451956012899, 0.668951762288697, 
    0.521700987658334, 0.449381607642202, 0.150284056397679, 
    0.296537640980168, 0.442231469222928, 0.442231438194413, 
    0.403261029769007, 0.368360980392784, 0.31000521266891), 
    statistic = c(-6.63829797286835, 2.52652631541004, -1.71678769319892, 
    -0.607127132566304, -1.19702277164885, -0.0235635594350468, 
    1.57959643459277, 1.18210665840736, 1.52074075389429, -1.18149047811997, 
    -1.18149056101748, -0.77166686928052, -0.264982126886897, 
    1.07473625097287), `p-value` = c(3.17325888779118e-11, 0.0115196757815383, 
    0.0860179703815371, 0.543766545174063, 0.231297679141505, 
    0.981200739433062, 0.114199316297104, 0.238906330511932, 
    0.130286415267008, 0.239150183209052, 0.239150150390535, 
    0.441442894297231, 0.791362181433913, 0.284100853393404), 
    padj = c(2.22128122145383e-10, 0.0806377304707678, 0.60212579267076, 
    1, 1, 1, 0.799395214079727, 1, 0.912004906869059, 1, 1, 1, 
    1, 1), backtransformed = c(16.8381049598515, 74.7687961273842, 
    17.6775359193695, 41.3681847902961, 30.9865004122157, 49.6926755645072, 
    67.0366154984819, 0.544296506773912, 0.61086671562056, 0.372269642519627, 
    0.372269642519629, 0.422825965246518, 0.475617086996406, 
    0.582531420029282), backtransformed_upper_limit = c(20.4801710999514, 
    81.9990726021826, 34.4729813692433, 55.6183376604594, 46.7097931866074, 
    62.4667651702418, 76.1191536281209, 0.581257050349088, 0.678632521994339, 
    0.479945564196047, 0.479945556451399, 0.523003213247331, 
    0.567277487065846, 0.655471735842067), backtransformed_lower_limit = c(13.7318762045887, 
    65.8440812384191, 8.05859678049629, 28.4302795983261, 18.6987873977282, 
    36.9585805747054, 56.4749361112238, 0.506841504816302, 0.538528279224913, 
    0.2759334211022, 0.275933427301519, 0.328617577822115, 0.385570519640422, 
    0.505791897762753), panel = structure(c(1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("a", "b"), class = "factor"), 
    col = c("grey", "red", "red", "red", "blue", "blue", "blue", 
    "grey", "red", "red", "red", "red", "blue", "blue")), .Names = c("treatment", 
"estimate", "std", "statistic", "p-value", "padj", "backtransformed", 
"backtransformed_upper_limit", "backtransformed_lower_limit", 
"panel", "col"), row.names = c(NA, 14L), class = "data.frame")



Barfig4 <- data.frame(treatment = c("control","9-tricosene","tricosane","7-tricosene","5-tricosene","2-methyloctacosane","heneicosane"),
                       backtransformed = c(16.8, 74.7, 17.7,41.3,30.9, 49.6, 67.0, 0.5, 0.6,0.3,0.3,0.4,0.4,0.5),
                       lower = c(3,8,9,12,12,12,10,0,0,0,0,0,0,0),
                       upper = c(37, 156, 52, 96,77,112,143,1,1,0,0,0,1,1),
                       col = c("grey", "red", "red", "red","blue","blue","blue","grey", "red", "red", "red","red","blue","blue"))

enter image description here 这就是我得到的,它不像我想要的。 是不是上下限有问题?

对于颜色,我给出以下代码:-

grey = rgb(190,190,190, maxColorValue=255)
blue = rgb(27,67,131, maxColorValue=255)
red = rgb(170,12,42, maxColorValue=255)

【问题讨论】:

  • 你能说出错误来自哪里吗?比如,如果你删除了所有的theme 选项,你还会得到错误吗?如果删除构面、错误栏或条形几何图形怎么办?
  • 为了真正帮助您,我们需要您以可重复的方式共享数据。将dput(Barfig4) 的输出粘贴到您的问题中,我们可以将您的数据结构复制/粘贴到 R 中。
  • 我是否必须发送我工作时使用的全部数据?
  • 您应该发布一个足够大的子集来展示您的问题。
  • 是的,当我删除主题选项时仍然出现错误:rep(value[[k]], length.out = n) 中的错误:尝试复制“闭包”类型的对象

标签: r ggplot2


【解决方案1】:

如果您移动 fill=col 语句,则不会发生该错误。 我创建了一个虚拟数据框来尝试复制问题

dummydat <- data.frame(treatment = c("intercept", "treatment1", "treatment2"),
                   backtransformed = c(16.8, 74.7, 17.7),
                   lower = c(15, 70, 15),
                   upper = c(18, 77, 20),
                   col = c("grey", "red", "red"))

以下代码因您之前看到的错误而失败:

ggplot(dummydat, aes(x=treatment, y=backtransformed)) + 
geom_bar(stat="identity", position="dodge", fill=col, width=0.5,size=5)

错误是:

Error in rep(value[[k]], length.out = n) : 
attempt to replicate an object of type 'closure'

但这运行没有错误:

ggplot(dummydat, aes(treatment, backtransformed, fill=col))+
geom_bar(stat="identity", position="dodge", width=0.5,size=5) 

我会使用 scale_fill_manual 语句来设置颜色。

更新 这是使用您自己的 Barfig4 数据的代码

    ggplot(Barfig4, aes(treatment, backtransformed))+
    geom_bar(stat="identity", position="dodge", width=0.5,size=5, aes(fill=I(col))) +
    facet_grid(treatment~., scales="free_y") +
    geom_errorbar(aes(ymin=lower, ymax=upper),width=0,size=0.5)+ 
   theme(legend.position="none") + 
  theme( axis.line = element_line(colour = "black", size = 1, linetype = "solid"), 
         axis.text = element_text(size = 12, colour="black"), # adjust size if you like
         panel.border = element_rect(colour = "black", fill=NA, size=1),
         axis.ticks = element_line(size = 1, colour="black")) +
  theme(axis.text.x=element_text(angle=30,hjust=1))

【讨论】:

  • 好眼光! fill = col 肯定需要在 aes() 里面。
  • 谢谢 :) 我现在将尝试制作这个 ggplot2。 :)
  • Gregor,我确实制作了 ggplot2,但它并不符合我的预期。您为上层和下层使用了一些非常不同的值。你从哪里得到的。
  • @Risha 我没有做出这个答案,广告做了。他们在您发布数据之前发布了它,并在顶部解释了“我创建了一个虚拟数据框来尝试复制问题”。我认为他们正确地发现了您的问题,即fill = col 需要在aes() 内。如果您在代码中进行更正,我认为您会发现它有效。
  • Gregor 或 adts:我发布了代码和 ggplot2,但它不像我想要的。有人可以帮忙制作 ggplot2 吗?
猜你喜欢
  • 1970-01-01
  • 2013-07-17
  • 2021-01-24
  • 1970-01-01
  • 2020-05-05
  • 2019-12-01
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多