我想将水平和垂直线添加到我的绘图中,该绘图具有对数转换的x轴。如果我剪切代码,在“轴”转换之前,所有内容都按预期绘制(下面的代码)。 #image:
已解决 - HERE 。我搜索过堆栈,但谷歌搜索刚刚发现了这个相关的帖子。
此外,我在审美方面遇到困难,例如主题(legend.background.color和网格线...... - 它们没有出现)
解决了次要问题:用于网格线的背景颜色[fill =“lightblue”],尺寸太小(.01) - 更改为( 0.5)
如果我运行完整代码,则会收到以下警告消息(未绘制任何行)
Warning messages:
1: In self$trans$x$transform(x) : NaNs produced
2: In trans$transform(value) : NaNs produced
图像:
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")
答案 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"))