我正在创建一个图表,显示湖水位随时间的变化.我在下面附上了一个简单的例子.我想在图的右侧添加一个刻度(刻度线和注释),以英尺为单位显示高程.我知道ggplot2不会允许两个不同的比例(参见2 y轴的绘图,左边的一个y轴,右边的另一个y轴),但因为这是相同比例的转换,有没有办法做这个?我更喜欢继续使用ggplot2而不必恢复到plot()函数.
library(ggplot2)
LakeLevels<-data.frame(Day=c(1:365),Elevation=sin(seq(0,2*pi,2*pi/364))*10+100)
p <- ggplot(data=LakeLevels) + geom_line(aes(x=Day,y=Elevation)) +
scale_y_continuous(name="Elevation (m)",limits=c(75,125))
p
Run Code Online (Sandbox Code Playgroud) 我正在尝试以ggplot2y轴和x轴颠倒的方式绘制图。我过去常常scale_y_reverse()将y轴反转,但无法弄清楚如何将x轴放在顶部而不是底部。
dfn <- read.table(header=T, text='
supp dose length
OJ 0.5 13.23
OJ 1.0 22.70
OJ 2.0 26.06
VC 0.5 7.98
VC 1.0 16.77
VC 2.0 26.14
')
library(ggplot2)
p1 <- ggplot(data=dfn, aes(x=dose, y=length, group=supp, colour=supp)) + geom_line() + geom_point()
p1 <- p1 + scale_y_reverse()
print(p1)
Run Code Online (Sandbox Code Playgroud)

前一段时间,我询问是否要在ggplot中添加辅助变换的x轴,Nate Pope提供了ggplot2中描述的出色解决方案:在plot顶部添加辅助变换的x轴。
该解决方案对我来说非常有效,我又返回了它,希望它可以用于新项目。不幸的是,该解决方案在ggplot2的最新版本中无法正常工作。现在,运行完全相同的代码将导致轴标题“剪切”,以及刻度线和标签重叠。这是一个示例,问题以蓝色突出显示:
可以使用以下代码来复制此示例(这是Nate Pope以前工作出色的代码的精确副本):
library(ggplot2)
library(gtable)
library(grid)
LakeLevels<-data.frame(Day=c(1:365),Elevation=sin(seq(0,2*pi,2*pi/364))*10+100)
## 'base' plot
p1 <- ggplot(data=LakeLevels) + geom_line(aes(x=Elevation,y=Day)) +
scale_x_continuous(name="Elevation (m)",limits=c(75,125)) +
ggtitle("stuff") +
theme(legend.position="none", plot.title=element_text(hjust=0.94, margin = margin(t = 20, b = -20)))
## plot with "transformed" axis
p2<-ggplot(data=LakeLevels)+geom_line(aes(x=Elevation, y=Day))+
scale_x_continuous(name="Elevation (ft)", limits=c(75,125),
breaks=c(90,101,120),
labels=round(c(90,101,120)*3.24084) ## labels convert to feet
)
## extract gtable
g1 <- ggplot_gtable(ggplot_build(p1))
g2 <- ggplot_gtable(ggplot_build(p2))
## overlap the panel of the 2nd plot …Run Code Online (Sandbox Code Playgroud) 我在Excel中制作了以下图表:
但后来我想我会用ggplot让它变得更漂亮.我到目前为止:
如果你很好奇,数据基于我的回答,虽然这并不重要.该图是标准的ggplot2构造,具有一些预处理,并且通过中间的x轴的粗线是用p + geom_hline(aes(yintercept=0))(p是ggplot对象)实现的.
我觉得Excel图中的轴配置更好.它强调0线(当数据是金钱时很重要)并且因为你不必从底部一直跟随线条,因此更容易找到截距.这也是人们在纸上或纸板上绘图时绘制轴的方式.
也可以在ggplot中像这样移动轴吗?我不仅想要这条线,而且还要移动刻度线标签.如果有,怎么样?如果不是,是技术还是设计的原因?如果按设计,为什么做出决定?
对于出版物,我需要在现有图中添加第二个y轴.我遇到过如何做到这一点的方法(https://rpubs.com/kohske/dual_axis_in_ggplot2).但是,我并不太了解编码.我找不到一种方法来使它成为正确的y轴也显示,而不是顶部边框.我的编码中缺少什么?这是我的虚拟数据:
df1 <- structure(list(month = structure(1:12, .Label = c("Apr", "Aug",
"Dec", "Feb", "Jan", "Jul", "Jun", "Mar", "May", "Nov", "Oct",
"Sep"), class = "factor"), RI = c(0.52, 0.115, 0.636666666666667,
0.807, 0.66625, 0.34, 0.143333333333333, 0.58375, 0.173333333333333,
0.5, 0.13, 0), sd = c(0.327566787083184, 0.162634559672906, 0.299555225848813,
0.172887246493199, 0.293010848165827, 0.480832611206852, 0.222785397486759,
0.381610777775321, 0.219393102292058, 0.3, 0.183847763108502,
0)), .Names = c("month", "RI", "sd"), class = "data.frame", row.names = c(NA,
-12L))
df2<-structure(list(month = structure(c(5L, 4L, 8L, 1L, 9L, 7L, 6L,
2L, 12L, 11L, 10L, 3L), .Label …Run Code Online (Sandbox Code Playgroud)