轴使用scale_y_log10()在ggplot2中勾选未对齐和标记

时间:2013-05-22 19:15:20

标签: r ggplot2 axes

我正在尝试制作figure similar to this

enter image description here

y轴上的日志刻度而不是x。我已经能够使用以下代码生成它:

setwd('/Users/marleyjarvis/Desktop/')
CompMero=read.csv("CompMero.csv")
library(ggplot2)
library(scales) #for the trans and format functions
attach(CompMero)

ggplot(CompMero, aes(x=station, y=Mean)) + 
geom_errorbar(aes(ymin=Mean-StErr, ymax=Mean+StErr), colour="black", width=.1) +
geom_point(size=3) +
xlab("Tow station with respect to foam line and front") +
ylab(expression(paste(Mean~no~per~m^3))) +
theme_bw() +
theme(
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
) + 
scale_x_continuous(breaks=c(1:3), labels=c("Inshore", "Foam line", "Offshore")) +
annotation_logticks(sides = "l") + #log ticks only on y!!!!
scale_y_log10(breaks = trans_breaks("log10", n=6, function(x) 10^x),
          labels = trans_format("log10", math_format(10^.x)),
          minor_breaks = log10(5) + -1:3) +
coord_fixed()

会产生following figure output

enter image description here

我的问题: 关于无花果有两件事,我无法弄清楚如何改变(尽管数小时搜索文档,网络等)

  1. 我希望Y轴编号不在指数中:即我希望y轴标签读取“100”,“1000”等而不是“10 ^ 2”,“10 ^ 3" 。我试过阅读?trans_breaks和?trans_format并搜索math_format()语法以及尝试更改10 ^ .x但没有运气。我将为具有不同y轴范围的多组数据生成这些图形,因此我想将其写入代码以反映y数据范围,而不是简单地将标签更改为“100”“1000”等。我希望这是有道理的。

  2. “中途”刻度标签和外部刻度与内部中间刻度不匹配。换句话说,“10 ^ 2.5”标签,我称之为“10 ^ 2”和“10 ^ 3”之间的中间标记,具有与内部不匹配的外部刻度标记勾选它应该的标记。相反,这个外部刻度标记位于物理上“10 ^ 2”和“10 ^ 3”之间距离的一半,这在内部刻度标记位置上是不正确的(我希望外部匹配)。根据我在阅读食谱8.15“在R Graphics Cookbook中添加对数轴的刻度”的理解,我的代码中的minor_breaks = log10(5)+ -1:3)行应解决这个问题,但我必须做点什么错误。我无法弄明白。或者(也许最好是我的最终产品发布)我想简单地删除这些中途刻度和标签。我想学习如何做到这一点(排成一半的顺序)。

  3. 我的示例数据: 样本数据:CompMero

    编辑:样本数据位于名称= stationID,station,Mean,StErr
    的列中 站ID:泡沫线,陆上,近海 站:2,1,3 平均值:3419.401,35.56681,70.47807 StErr:1888.509,11.55935,40.04964

    非常感谢您的任何帮助或指示。我花了很多时间阅读文档和帮助文件并搜索过去的问题,但却无法解决这两个问题。如果有人能指出我正确的方向,我真的很感激。

1 个答案:

答案 0 :(得分:2)

如果其他人偶然发现了这个问题并且可能会受益,我已经制定了轴标签,并且使用以下代码摆脱了那些错位的“中途”滴答:

ggplot(df, aes(x=station, y=Mean)) + 
geom_errorbar(aes(ymin=Mean-StErr, ymax=Mean+StErr), colour="black", width=.1) +
geom_point(size=3) +
xlab(NULL) +
ylab(NULL) +
theme_bw() +
theme(
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
) + 
scale_x_continuous(expand=c(.2,0), breaks=c(1:3), labels=c("IN", "FL", "OFF")) +
annotation_logticks(sides = "l") + #log ticks only on y!!!!
scale_y_log10() +
theme(axis.text.x=element_text(size=16))+
theme(axis.text.y=element_text(size=16))