R 在对数刻度(带渐近线)上绘图,并在ggplot2中为零
我正在绘制具有渐近尾部的剂量-反应曲线。我真的希望在显示0的图中包括载体(对照)剂量 0通常计算为.000000000 1的剂量-这是这些图中的常见做法 我真的很喜欢下面这张图片的显示方式,这张图片是从一个关于如何使用程序GraphPad:PRISM绘图的pdf文件中拍摄的 旁注:我发现了如何使用基本图形来实现这一点,但没有使用ggplot2 针对matlab提出了一个类似但不同的SE问题: 我的R代码如下:R 在对数刻度(带渐近线)上绘图,并在ggplot2中为零,r,plot,ggplot2,drc,R,Plot,Ggplot2,Drc,我正在绘制具有渐近尾部的剂量-反应曲线。我真的希望在显示0的图中包括载体(对照)剂量 0通常计算为.000000000 1的剂量-这是这些图中的常见做法 我真的很喜欢下面这张图片的显示方式,这张图片是从一个关于如何使用程序GraphPad:PRISM绘图的pdf文件中拍摄的 旁注:我发现了如何使用基本图形来实现这一点,但没有使用ggplot2 针对matlab提出了一个类似但不同的SE问题: 我的R代码如下: library(ggplot2) library(scales) ggplot(d
library(ggplot2)
library(scales)
ggplot(df, aes(x=dose,y=probability, group=model))+
geom_ribbon(aes(ymin=Lower,ymax=Upper,x=dose,
fill=model, col=model,alpha=2))+
#Axis log transformation:
annotation_logticks(scaled = TRUE,sides="b") +
scale_x_log10(breaks = 10^(-1:10),
labels = trans_format("log10", math_format(10^.x)))+
#Axes labels:
labs(x="dosage (log scale)", y="response",size=1)
数据:
df像这样的东西怎么样:
df$dose[1] <- 0.000001
df$facet <- ifelse(df$dose == min(df$dose), 1, 2)
ggplot(df, aes(x=dose,y=probability, group=model))+
geom_point(data = subset(df, facet == 1)) +
geom_ribbon(aes(ymin=Lower,ymax=Upper,x=dose,
fill=model, col=model,alpha=2))+
#Axis log transformation:
annotation_logticks(scaled = TRUE,sides="b") +
scale_x_log10(breaks = c(0.000001, 10^(0:10)),
labels = c(0, math_format()(0:10))) +
#Axes labels:
labs(x="dosage (log scale)", y="response",size=1) +
facet_grid(~facet, scales = 'free', space = 'free') +
theme(strip.background = element_blank(),
strip.text = element_blank())
df$dose[1]您可以将plotrix用于断轴:
library(plotrix)
plot(df$dose, df$probability, log='x', xlim=c(0.1,1e4), xaxt='n', col=NA)
axis(1, at=10^(-1:4), labels=c(0, 10^(0:4)))
axis.break(breakpos = 0.4)
polygon(c(df$dose, rev(df$dose)), c(df$Lower, rev(df$Upper)), col = rgb(0.8,0.1,0.1,0.5))
points(0.1,0, pch=19, cex=0.5)
分解如下:
我们在plot命令中使用xlim
以低于实际数据点一个数量级的方式启动轴
我们在axis命令中设置laels,将x轴上的最低点标记为零(即使它实际上在x=0.1)
然后在前两个标签之间插入axist断点
最后,我们在(0.1,0)处绘制一个点,该点将显示为(0,0),因为我们在此处插入了轴打断并将轴标记为零
从这个问题来看,它看起来像是轴。断裂是解决办法。我已经在使用中断来绘制(10^x)轮廓。我在玩下面的代码时取得了一些进展,但ggplot2似乎不想画0…因为我已经告诉它画10^X。也许最好不要用“0中断”进行绘图…但现在我只想知道如何做<代码>缩放x_log10(分界=c(1,10^(2:10)),标签=转换格式(“log10”,数学格式(10^.x))+
缩放x_log10(分界=10^(0:10),标签=c(0,数学格式()(1:10))
?非常接近-缺少的只是对数10标度和0之间的某种差距,为了说这是一条渐近线(如第一张图所示),但这里是零剂量。就是这样!它看起来不像我想象的那么好,但知道怎么做仍然很好。在这种情况下,任何人都有类似的问题:我一直收到一个错误…'“closure”不是可子集的
,因为我忘了在df$facet@Arch中重命名一个变量,是的,这是调用数据df
的缺点,它已经是一个函数,因此最好避免使用它,并使用类似d
、dat
或d\u f
的东西,这可能会产生一个更有用的错误。我认为OP已经意识到了这个选项:“旁注:我已经找到了如何使用基本图形,而不是使用ggplot2来完成此操作”。@Axeman好的,不知怎么的,我在OP中漏掉了这条评论。不过,这里有一个答案告诉其他人如何在base中完成此操作并没有坏处。比OP的评论更有用,他们知道怎么做。是的,我同意,我很高兴你发布了它。我找不到使用r基图形的旧r脚本,但我相信在这些情况下我所做的只是添加术语break=TRUE
。例如:plot(mod_LL2.2,add=FALSE,break=TRUE,col=“rutch”)
。在某些情况下,iirc的这种方法是有效的。但无论如何,我一直在切换到ggplot2。我将在问题的底部添加一个编辑,注意你的r基图形解决方案。
library(plotrix)
plot(df$dose, df$probability, log='x', xlim=c(0.1,1e4), xaxt='n', col=NA)
axis(1, at=10^(-1:4), labels=c(0, 10^(0:4)))
axis.break(breakpos = 0.4)
polygon(c(df$dose, rev(df$dose)), c(df$Lower, rev(df$Upper)), col = rgb(0.8,0.1,0.1,0.5))
points(0.1,0, pch=19, cex=0.5)