Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在对数刻度(带渐近线)上绘图,并在ggplot2中为零_R_Plot_Ggplot2_Drc - Fatal编程技术网

R 在对数刻度(带渐近线)上绘图,并在ggplot2中为零

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

我正在绘制具有渐近尾部的剂量-反应曲线。我真的希望在显示0的图中包括载体(对照)剂量

0通常计算为.000000000 1的剂量-这是这些图中的常见做法

我真的很喜欢下面这张图片的显示方式,这张图片是从一个关于如何使用程序GraphPad:PRISM绘图的pdf文件中拍摄的

旁注:我发现了如何使用基本图形来实现这一点,但没有使用ggplot2

针对matlab提出了一个类似但不同的SE问题:

我的R代码如下:

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)