在ggplot2

时间:2016-10-20 14:15:57

标签: r plot ggplot2 drc

我想将水平和垂直线添加到我的绘图中,该绘图具有对数转换的x轴。如果我剪切代码,在“轴”转换之前,所有内容都按预期绘制(下面的代码)。 #image:

  

已解决 - HERE   。我搜索过堆栈,但谷歌搜索刚刚发现了这个相关的帖子。

     

此外,我在审美方面遇到困难,例如主题(legend.background.color和网格线...... - 它们没有出现)

     

解决了次要问题:用于网格线的背景颜色[fill =“lightblue”],尺寸太小(.01) - 更改为( 0.5)

enter image description here

如果我运行完整代码,则会收到以下警告消息(未绘制任何行)

Warning messages:
1: In self$trans$x$transform(x) : NaNs produced
2: In trans$transform(value) : NaNs produced

图像:

enter image description here

geom_hline#没有被绘制。

现在正在绘制geom_vline - 这很奇怪,因为之前它不是。

ggplot(all_mydata, aes(x=dose,y=probability))+
  geom_point(col="orange")+
  geom_ribbon(data=p_df_all, aes(ymin=Lower,ymax=Upper, col="blue"))+
  geom_step(data=p_df_all, aes(x=dose,y=probability, col="green",(linetype="dotdash")))+      
  geom_hline(yintercept = 1)+

  geom_vline(xintercept = 10^10)+

  #Axes
  coord_trans(x = 'log10', limx = c(0.01,10000), limy=c(0.0001,1.1))+

  annotation_logticks(scaled = FALSE) +
  scale_x_continuous(breaks = trans_breaks("log10", function(x) 10^x),
                     labels = trans_format("log10", math_format(10^.x)))+

  xlab("log10 transformed") + ylab("0-1")+

  #Plot aesthetics:  
  theme(panel.background = element_rect(color = "red"), #isn't working
        panel.grid.major=element_line(color="green",size=.01))+ #isn't working

  theme(legend.position = c(.2, .7))+ #this works
  theme(legend.background=element_rect(color="black")) #this doesn't

数据(2个变量)

all_mydata <- structure(list(dose = c(3, 3, 25, 25, 25, 50, 50, 50), total = c(25L,25L, 25L, 25L, 25L, 25L, 25L, 25L), affected = c(1L, 3L, 22L, 14L, 22L, 23L, 16L, 21L), probability = c(0.04, 0.12, 0.88, 0.56, 0.88, 0.92, 0.64, 0.84), model = c("mod1", "mod1", "mod1", "mod1", "mod1", "mod1", "mod1", "mod1")), .Names = c("dose", "total", "affected", "probability", "model"), row.names = c(1L, 2L, 51L, 52L, 53L, 73L, 74L, 75L), class = "data.frame")

p_df_all <-structure(list(dose = c(1.0001, 1.04747510870603, 10.1171372457295, 10.5963897972846, 11.0983447203301, 9547.72091181669, 10000), 
probability = c(0.0683999851683096, 0.0710791589380873, 0.366688095557777, 
0.376331202778934, 0.386073310136858, 0.996189526007837, 
0.996343135145175), Lower = c(0.0490006092001366, 0.0512942391381131, 
0.342265517182034, 0.35200684160253, 0.361817143260538, 0.993441634537481, 
0.993687296620045), Upper = c(0.0877993611364827, 0.0908640787380616, 
0.39111067393352, 0.400655563955339, 0.410329477013178, 0.998937417478193, 
0.998998973670305), model = c("mod1", "mod1", "mod1", "mod1", 
"mod1", "mod1", "mod1")), .Names = c("dose", "probability", "Lower", "Upper", "model"), row.names = c(1L, 2L, 51L, 52L, 53L, 199L, 200L), class = "data.frame")

1 个答案:

答案 0 :(得分:0)

这是一个版本的图表,其中所有主题元素都在工作,日志比例在没有坐标转换的情况下实现,并且次要日志刻度标记仍然存在。我大部分都保留了你的颜色选择,但改变了一些东西以使它们更好地显示出来。颜色组合严重冲突,所以让我知道这是否真的是你的想法。在下面的代码中,注释引用注释下方的代码行。

ggplot(all_mydata, aes(x=dose,y=probability)) +
  geom_point(col="orange", size=4) +
  # To generate an informative legend without mapping to a data column,
  #  use informative names for the colour aesthetics
  geom_ribbon(data=p_df_all, aes(ymin=Lower, ymax=Upper, colour="Ribbon"), 
              fill="yellow", size=1) +
  # Move linetype outside of aes so that it will be interpreted literally,
  #  rather than as an aesthetic mapping
  geom_step(data=p_df_all, aes(x=dose, y=probability, colour="Dashed Line"), 
            linetype="dotdash", size=1) +      
  geom_hline(yintercept = 1) +
  geom_vline(xintercept = 10^10) +
  # Remove coordinate transformation
  #coord_trans(x = 'log10', limx = c(0.01,10000), limy=c(0.0001,1.1)) +
  # Change to scaled = TRUE 
  annotation_logticks(scaled = TRUE, sides="b")  +
  scale_x_log10(breaks = 10^(-1:10),
                labels = trans_format("log10", math_format(10^.x))) +
  # This is where you set the colors for the colour aesthetic
  scale_colour_manual(values=c("Ribbon"="blue", "Dashed Line"="green")) +
  xlab("log10 transformed")  + ylab("0-1") +
        # Use fill to set background color
  theme(panel.background = element_rect(fill = "red"),
        # Set a larger size, so that grid lines will be visible
        panel.grid.major=element_line(color="green", size=.3),
        legend.position = c(.8, .7),
        # Set legend title and text "white" so they're visible with "black" background
        legend.title = element_text(colour="white"),
        legend.text = element_text(colour="white"),
        # Use fill to set background color
        legend.background=element_rect(fill="black")) 

enter image description here