【问题标题】:Stat_smooth on ggplot2 not showingggplot2 上的 Stat_smooth 未显示
【发布时间】:2016-06-26 10:45:06
【问题描述】:

我试图在我的 ggplot 中添加一条 lm 行,代码如下所示:

# RING data:
#### Read data & Converting factors ####
dat <- read.table("RING R kopi.txt", header=TRUE)  
str(dat)
dat$Vial <- as.factor(dat$Vial)
dat$Line <- as.factor(dat$Line)
dat$rep <- as.factor(dat$rep)
dat$fly <- as.factor(dat$fly)  
str(dat)

datSUM <- summaryBy(t05+t10+t15+t20+t25+t30~rep+Conc+Sex+Line+Vial,data=dat, FUN=sum)
fl<-levels(datSUM$Line)
datA <- droplevels(datSUM[datSUM$Conc=="a",])
datB <- droplevels(datSUM[datSUM$Conc=="b",])
datC <- droplevels(datSUM[datSUM$Conc=="c",]) 
datD <- droplevels(datSUM[datSUM$Conc=="d",])
datE <- droplevels(datSUM[datSUM$Conc=="e",])
datX <- droplevels(datSUM[datSUM$Conc=="x",])
datY <- droplevels(datSUM[datSUM$Conc=="y",])


c <- ggplot(Line, t05.sum, data= datA, facets=Sex~rep)
c + stat_smooth(method=lm, fullrange = TRUE) + geom_point()

脚本运行但没有添加任何行,我也尝试过使用

c + stat_smooth(method=lm) + geom_point()
c + stat_smooth(method=lm, fullrange=TRUE, alpha = 0.05) + geom_point()
c <- qplot(aes(y=Line, x=t05.sum), data= datA, facets=Sex~rep)
c + stat_smooth(method=lm, fullrange = TRUE) + geom_point()

结果:

数据集的子集:

结构(列表(代表=结构(c(1L,1L,1L,1L,1L,1L,1L,1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("1", "2", "3"), class= "factor"), Conc = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "a", class= "factor"), 性别 = 结构(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L ), .Label = c("f", "m"), class= "factor"), Line = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 1L), .Label = c("20", "23", "40", "73"), class= "因子"), Vial = structure(c(3L, 14L, 24L、31L、38L、4L、12L、21L、26L、35L、6L、8L、9L、37L、40L、 2L, 10L, 11L, 28L, 33L, 13L, 15L, 18L, 22L, 27L), .Label = c("89", “92”、“102”、“112”、“113”、“118”、“124”、“126”、“137”、“138”、 “139”、“152”、“154”、“155”、“161”、“163”、“166”、“168”、“171”、 “173”、“179”、“182”、“184”、“185”、“187”、“201”、“203”、“205”、 “215”、“218”、“220”、“222”、“225”、“231”、“240”、“245”、“251”、 "252", "260", "267"), class= "因子"), t05.sum = c(39.15, 63.99、44.55、25.65、54.24、8.37、72.09、19.17、56.43、78.24、 140.13、29.43、19.71、100.32、92.16、11.61、71.55、76.41、 123.39, 142.29, 56.97, 66.15, 21.33, 66.15, 33.75), t10.sum = c(59.67, 79.65、60.21、8.91、85.44、15.93、101.79、41.85、76.95、84.96、 98.55、36.45、31.59、115.2、92.16、26.88、90.99、95.31、127.17、 173.61, 74.79, 81.27, 38.61, 80.73, 101.25), t15.sum = c(78.57, 107.73、80.73、59.67、118.56、39.15、98.01、75.33、76.95、 90.24、122.85、41.31、51.57、126.24、90.24、43.99、111.51、 119.07、134.73、190.89、118.53、121.47、68.64、97.47、120.69 ), t20.sum = c(92.61, 144.45, 109.35, 89.37, 139.68, 59.13, 103.41、109.89、74.25、105.6、127.71、54.81、75.87、132.96、 93.12、65.07、147.15、127.17、147.69、212.49、163.35、138.51、 89.91, 120.15, 142.29), t25.sum = c(102.33, 162.27, 127.71, 113.13、168.96、76.41、125.55、135.81、74.79、114.72、136.35、 68.31、95.85、139.2、92.64、111.51、185.49、129.87、145.53、 220.05, 196.83, 151.47, 136.35, 121.23, 154.17), t30.sum = c(127.71, 177.93、171.45、148.23、195.84、93.69、145.53、166.05、86.13、 122.88、147.15、91.53、119.07、142.08、92.16、147.69、200.07、 134.73、140.67、226.53、219.51、150.93、155.25、124.47、144.99 )), .Names = c("rep", "Conc", "Sex", "Line", "Vial", "t05.sum", "t10.sum", "t15.sum", "t20.sum ", "t25.sum", "t30.sum"), row.names = c(NA, 25L), class= "data.frame")

【问题讨论】:

  • 您能否通过显示dat 的内容使您的问题可重现?
  • 请不要图片,使用dput()
  • 这是你想要的吗?
  • 我已经使用 dput() 从 R studio 复制了准确​​的输出
  • 试着做一个玩具数据框,太长了

标签: r ggplot2


【解决方案1】:

我正在使用您发布的dput 输出作为我的数据。

检查 datA,我们可以看到 Line 是一个因素:

'data.frame':   25 obs. of  11 variables:
 $ rep    : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ...
 $ Conc   : Factor w/ 1 level "a": 1 1 1 1 1 1 1 1 1 1 ...
 $ Sex    : Factor w/ 2 levels "f","m": 1 1 1 1 1 1 1 1 1 1 ...
 $ Line   : Factor w/ 4 levels "20","23","40",..: 1 1 1 1 1 2 2 2 2 2 ...
 [TRUNCATED]

因此,当您尝试使用“stat_smooth”时,它不知道在尝试拟合平滑器时如何处理 Line 的级别。

您需要在绘图前将 Line 转换为数字。

您可以通过更改数据框来做到这一点:

datA$Line <- as.numeric(as.character(Line)) # need to convert before to char
# or the numeric values will become the internal factor numbers and not the labels

然后你按照你的方式绘制:

c <- qplot(Line, t05.sum, data= datA, facets=Sex~rep)
c + stat_smooth(method=lm, fullrange = TRUE) + geom_point()

您也可以在 qplot 调用中进行转换,如下所示:

c <- qplot(as.numeric(as.character(Line)), t05.sum, 
        data= datA, facets=Sex~rep)

【讨论】:

  • 太棒了!谢谢,正是我需要的!
【解决方案2】:

缺少数据,我刚刚创建了一个玩具数据框。我认为这就是您所需要的:

set.seed(1)
df <- data.frame(Line = sample(c(20, 23, 40, 73), 100, TRUE), 
                 t = runif(100, 0, 200), 
                 Sex = sample(c("F", "M"), 100, TRUE), 
                 rep = sample(c("1", "2", "3"), 100, TRUE))

然后是绘图:

library(ggplot2)

ggplot(df, aes(x= Line, y = t)) + 
  geom_point() + 
  facet_grid(Sex~rep) + 
  stat_smooth()

【讨论】:

  • 如果 Line 是一个因素,这不起作用。这可能是 OP 问题的根源。
  • 是的,线路是一个因素,有没有办法处理这个问题?
  • 附带说明:如果该变量中的所有可能值都是数字(这是示例的情况),我建议将它们编码为(数字)而不是寻找解决方法来表示它们
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
  • 2019-01-17
  • 1970-01-01
  • 2017-10-02
  • 2016-01-22
  • 1970-01-01
相关资源
最近更新 更多