【问题标题】:ggplot - trendline based on full data set in a subset graphggplot - 基于子图中完整数据集的趋势线
【发布时间】:2020-05-06 21:35:48
【问题描述】:

我的数据集由 y 轴上介于 -200 和 100% 之间的数据组成。 使用 ylim(0,100) 函数我摆脱了负值(我想要的),但是当使用 geom_smooth 时,此函数仅根据 ggplot 中显示的数据计算趋势。

有没有办法在我的 ggplot 中仅显示 0-100% 的数据子集时使用完整数据集制作趋势?

这是一个简化的例子;

df1 <- read.table(text = "
Group   Sample  Percentage
A   185 50
B   185 60
C   185 70
D   185 60
A   159 40
B   159 -20
C   159 50
D   159 45
A   265 -35
B   265 30
C   265 10
D   265 40
A   143 60
B   143 -30
C   143 70
D   143 75
", header = TRUE)
df1$Sample <- factor(df1$Sample)

ggplot() + 
  theme_light() + 
  geom_point(data = df1, aes(x = Sample, y = Percentage, color = Group), size = 2) + 
  geom_smooth(data = df1, aes(x = as.numeric(Sample), y = Percentage, color = Group), method=lm, se=FALSE, fullrange=TRUE) +
  ylab("(%)") +
  scale_color_manual(values=c('orange2','red','purple','blue'))

当我将 ggplot 与我的完整数据集一起使用时,我得到了这些趋势;

当我使用时;

plot + ylim(0,100)

我得到这张图;

我想显示第一张图的趋势,但将 y 轴限制为仅显示 0-100 之间的点,就像这样;

提前致谢!

【问题讨论】:

  • 请提供minimal reproducible example:支持问题和您尝试过的代码的最小数据集。
  • 听起来你在继承数据。您可以在 geom_smooth 函数中确定要用作参数的数据。
  • @markhogue 我该怎么做?
  • geom_smooth(data=...) geom_smooth,其余的使用子集即可。
  • 我使用的是完整的数据集,如您在上面的示例中所见,但 ylim 是它的子集,您能详细说明您的意思吗? @chemdork123

标签: r ggplot2 trend


【解决方案1】:

您的问题是xlim() 不仅设置了轴的限制,而且丢弃了轴外的那些数据点。您需要使用coord_cartesian(xlim=) 设置限制。让我告诉你我的意思:

set.seed(1111)
df <- data.frame(x=1:100, y=rnorm(100))

p <- ggplot(df, aes(x,y)) + geom_point() +
  geom_smooth(method='lm', formula='y~x')
p

那条线略微上升。如果我们使用xlim() 来缩小限制,我们可以选择两个使线向下倾斜的点,如果geom_smooth() 只取那些作为近似值:

p + xlim(49, 52)

正如预期的那样,这条线现在向下倾斜。如果我们想保留数据框中的其余数据点,但只是缩小我们的查看区域,请使用coord_cartesian(xlim=)

p + coord_cartesian(xlim=c(49,52))

现在看起来不错。

【讨论】:

  • 谢谢,这正是我要找的!
猜你喜欢
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多