gpt4 book ai didi

r - 使用 coord_trans 函数使数据从图中消失

转载 作者:行者123 更新时间:2023-12-04 11:35:53 26 4
gpt4 key购买 nike

我正在尝试使用 ggplot2 绘制我的数据,但来自我的 x 轴的数据应该进行对数转换。我尝试使用 coord_trans 函数,因为我想保留原始标签并只转换我的坐标,但是当我这样做时,我的所有点都从我的图表中消失了。我不知道为什么会这样?可能是因为我的数据中有零吗?我该如何解决这个问题?

这是我制作 ggplot 的输入:

    library(afex)
library(car)
library(MASS)
library(rockchalk)
library(multcomp)
library(lsmeans)
library(gplots)
library(ggplot2)
library(tidyr)
library(effects)
library(scales)
library(ggthemes)
library(gtools)

theme_set(theme_few(base_size=14))

p=ggplot(data, aes(x=day, y=(propinfected), linetype=treatment, group=treatment)

p + geom_smooth(aes(fill=treatment),colour="black", method="glm",
family="quasibinomial")+
coord_trans(xtrans = "log10")+
geom_point(aes(fill=treatment),size=5,pch=21)+
labs(x="Day", y="Above detection treshold", size=10)+
scale_y_continuous(labels= percent,breaks=seq(0,1,by=0.2),limits=c(0,1))+
scale_x_continuous(breaks=seq(0,16,by=4),limits=c(0,16))+
scale_fill_manual(values=c("black","grey"))+
theme(legend.justification=c(1,0), legend.position=c(1,0),
legend.title=element_blank(),axis.text=element_text(size=20),
axis.title=element_text(size=20),legend.text=element_text(size=15))

这是我使用的模型:
fitlog=glm(propinfected~log10(day+1)*treatment,family=quasibinomial(link=logit), data=data)

这是我使用的数据:
dput(data)

structure(list(treatment = structure(c(1L, 2L, 1L, 2L, 1L, 2L,
1L, 2L, 1L, 2L), .Label = c("CTRL", "DWV"), class = "factor"),
day = c(0L, 0L, 4L, 4L, 8L, 8L, 12L, 12L, 16L, 16L), infected = c(0L,
20L, 11L, 20L, 15L, 18L, 16L, 19L, 19L, 19L), not_infected = c(20L,
0L, 9L, 0L, 5L, 2L, 4L, 1L, 1L, 1L), propinfected = c(0,
1, 0.55, 1, 0.75, 0.9, 0.8, 0.95, 0.95, 0.95)), .Names = c("treatment",
"day", "infected", "not_infected", "propinfected"), row.names = c(NA,
-10L), class = "data.frame")

当我使用 allEffects 函数绘制我的图表时,我得到了正确的图表,具有正确的线条和置信区间。
但我想在 ggplot 中进行,因为 allEffects 图不太漂亮。
plot(allEffects(fitlog),ylab="Above detection treshold",type="response")

感谢您的帮助!

enter image description here

最佳答案

如果您定义了 formulageom_smooth成为您拟合的模型的公式 glm ,您将不需要 coord_trans根本。在您的情况下,它将是 y ~ log10(x + 1) .

ggplot(data, aes(x=day, y=propinfected, linetype=treatment, group=treatment)) + 
geom_smooth(aes(fill=treatment), formula = y ~ log10(x + 1),
colour="black", method="glm",
method.args = list(family="quasibinomial")) +
geom_point(aes(fill=treatment),size=5,pch=21) +
labs(x="Day", y="Above detection treshold", size=10) +
scale_y_continuous(labels= percent,breaks=seq(0,1,by=0.2),limits=c(0,1)) +
scale_x_continuous(breaks=seq(0,16,by=4),limits=c(0,16)) +
scale_fill_manual(values=c("black","grey")) +
theme(legend.justification=c(1,0), legend.position=c(1,0),
legend.title=element_blank(), axis.text=element_text(size=20),
axis.title=element_text(size=20), legend.text=element_text(size=15))

enter image description here

要按照以前的方式进行操作,您实际上需要使用合适的 scale_x函数然后使用 coord_trans .我总是需要一段时间来思考这个问题,还有这句话来自 coord_trans帮助页面总是帮助我:

The difference between transforming the scales and transforming the coordinate system is that scale transformation occurs BEFORE statistics, and coordinate transformation afterwards.



所以如果要在拟合模型之前对x变量进行变换,就需要使用scales进行变换。要以原始比例显示所有内容,您需要进行坐标变换。所以你最终会同时使用两者来获得你想要的最终产品。

这是一个使用 scale_x_log10 的简短示例和 coord_trans :
ggplot(data, aes(x=day + 1, y=(propinfected), linetype=treatment, group=treatment)) + 
geom_smooth(aes(fill=treatment),
colour="black", method="glm",
method.args = list(family="quasibinomial")) +
geom_point(aes(fill=treatment),size=5,pch=21) +
labs(x="Day", y="Above detection treshold", size=10) +
scale_y_continuous(labels= percent,breaks=seq(0,1,by=0.2),limits=c(0,1)) +
scale_x_log10(labels = seq(0,16,by = 4), breaks=seq(1,17,by=4), limits=c(1,17)) +
coord_trans(x = exp_trans(base = 10))

关于r - 使用 coord_trans 函数使数据从图中消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34571938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com