0

我正在尝试制作与此类似的数字

在此处输入图像描述

在 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()

这导致下图输出

在此处输入图像描述

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

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

  2. “中途”刻度标签和外部刻度与内部中途刻度不匹配。换句话说,我称之为“10^2”和“10^3”之间的中间刻度的“10^2.5”标签有一个与内部不匹配的外部刻度线应该打勾。相反,这个外部刻度线实际上位于“10^2”和“10^3”之间距离的一半,这与内部刻度线的位置不正确(我希望外部刻度线匹配)。从阅读 R Graphics Cookbook 中的配方 8.15“为对数轴添加刻度”中了解到,我的代码中的 minor_breaks = log10(5) + -1:3) 行应该可以解决这个问题,但我必须做点什么错误的。我一直无法弄清楚。或者(也许最好是为了我的最终产品发布)我想简单地删除这些中途刻度和标签。不过,我也想学习如何执行上述操作(排列中途刻度线)。

我的样本数据: 样本数据:CompMero

编辑:样本数据列在名称 = stationID, station, Mean, StErr
station ID: Foam line, Inshore, Offshore station: 2, 1, 3 Mean: 3419.401, 35.56681, 70.47807 StErr: 1888.509, 11.55935, 40.04964

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

4

1 回答 1

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))
于 2013-06-12T16:53:35.830 回答