Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用ggplot绘制次轴_R_Ggplot2_Transform_Axis - Fatal编程技术网

R 使用ggplot绘制次轴

R 使用ggplot绘制次轴,r,ggplot2,transform,axis,R,Ggplot2,Transform,Axis,我试图绘制三个变量(SA、SA1、SA2),其中两个变量(SA和SA2)位于左y轴上,一个变量(SA1)位于右辅助y轴上。我尝试在左y轴上使用limits=c(1e15,5e15)固定轴限制,同时尝试将次轴限制在limits=c(3e17,4.2e17)之间,但无法使用自定义限制绘制辅助轴 谢谢 参数“秒轴”仅创建一个新轴,但它不会更改数据,也不能用于打印数据 为了能够在较大范围内绘制来自两个组的数据,您需要首先缩小SA1的比例 在这里,我通过将其除以100(因为SA1的最大值与SA和SA2的最

我试图绘制三个变量(SA、SA1、SA2),其中两个变量(SA和SA2)位于左y轴上,一个变量(SA1)位于右辅助y轴上。我尝试在左y轴上使用
limits=c(1e15,5e15)
固定轴限制,同时尝试将次轴限制在
limits=c(3e17,4.2e17)
之间,但无法使用自定义限制绘制辅助轴

谢谢

参数“
秒轴”
仅创建一个新轴,但它不会更改数据,也不能用于打印数据

为了能够在较大范围内绘制来自两个组的数据,您需要首先缩小SA1的比例

在这里,我通过将其除以100(因为SA1的最大值与SA和SA2的最大值之间的比率接近100)来缩小它,并且我还以更适合
ggplot2
的更长格式重塑数据帧:

库(lubridate)
df$year=parse_date_time(df$year,orders=“%Y”)#以日期格式设置年份
图书馆(dplyr)
图书馆(tidyr)
DF%变异(SA1\u 100=SA1/100)%>%pivot\u更长(,-year,name\u to=“Var”,values\u to=“val”)
#一个tibble:44 x 3
年份Var val
1 2008 SA 1.41e15
2 2008 SA1 3.63e17
3 2008 SA2 4.07e15
4 2008 SA1_100 3.63e15
5 2009 SA 1.53e15
6 2009 SA1 3.77e17
7 2009 SA2 4.05e15
8 2009 SA1_100 3.77e15
9 2010 SA 1.52e15
10 2010年SA1 3.56e17
#…还有34行
然后,您可以使用(I子集数据帧以删除“SA1”并保留转换列“SA1_100”)来绘制它:

库(ggplot2)
ggplot(子集(DF,Var!=“SA1”),aes(x=年份,y=val,颜色=Var))+
geom_线()+
比例y连续(name=“主轴”,sec.axis=sec\u轴(~*100,name=“Secondary”))

顺便说一句,在
ggplot2
中,您不需要使用$来设计列,只需写下它的名称即可

数据

结构(列表年份=2008:2018,SA=c(1.40916e+15,1.5336e+15, 1.52473e+15、1.58394e+15、1.59702e+15、1.54936e+15、1.6077e+15、, 1.59211e+15、1.73533e+15、1.7616e+15、1.67771e+15)、SA1=c(3.63e+17、, 3.77e+17、3.56e+17、3.68e+17、3.68e+17、3.6e+17、3.6e+17、3.6e+17、3.68e+17、, 3.55e+17,3.58e+17,3.43e+17),SA2=c(4.07e+15,4.05e+15,3.94e+15, 3.95e+15、3.59e+15、3.53e+15、3.43e+15、3.2e+15、3.95e+15、3.03e+15、, 3.16e+15),row.names=c(NA,-11L),class=c(“data.table”, “data.frame”),.internal.selfref=)
参数
秒轴
仅创建一个新轴,但它不会更改数据,也不能用于打印数据

为了能够在较大范围内绘制来自两个组的数据,您需要首先缩小SA1的比例

在这里,我通过将其除以100(因为SA1的最大值与SA和SA2的最大值之间的比率接近100)来缩小它,并且我还以更适合
ggplot2
的更长格式重塑数据帧:

库(lubridate)
df$year=parse_date_time(df$year,orders=“%Y”)#以日期格式设置年份
图书馆(dplyr)
图书馆(tidyr)
DF%变异(SA1\u 100=SA1/100)%>%pivot\u更长(,-year,name\u to=“Var”,values\u to=“val”)
#一个tibble:44 x 3
年份Var val
1 2008 SA 1.41e15
2 2008 SA1 3.63e17
3 2008 SA2 4.07e15
4 2008 SA1_100 3.63e15
5 2009 SA 1.53e15
6 2009 SA1 3.77e17
7 2009 SA2 4.05e15
8 2009 SA1_100 3.77e15
9 2010 SA 1.52e15
10 2010年SA1 3.56e17
#…还有34行
然后,您可以使用(I子集数据帧以删除“SA1”并保留转换列“SA1_100”)来绘制它:

库(ggplot2)
ggplot(子集(DF,Var!=“SA1”),aes(x=年份,y=val,颜色=Var))+
geom_线()+
比例y连续(name=“主轴”,sec.axis=sec\u轴(~*100,name=“Secondary”))

顺便说一句,在
ggplot2
中,您不需要使用$来设计列,只需写下它的名称即可

数据

结构(列表年份=2008:2018,SA=c(1.40916e+15,1.5336e+15, 1.52473e+15、1.58394e+15、1.59702e+15、1.54936e+15、1.6077e+15、, 1.59211e+15、1.73533e+15、1.7616e+15、1.67771e+15)、SA1=c(3.63e+17、, 3.77e+17、3.56e+17、3.68e+17、3.68e+17、3.6e+17、3.6e+17、3.6e+17、3.68e+17、, 3.55e+17,3.58e+17,3.43e+17),SA2=c(4.07e+15,4.05e+15,3.94e+15, 3.95e+15、3.59e+15、3.53e+15、3.43e+15、3.2e+15、3.95e+15、3.03e+15、, 3.16e+15),row.names=c(NA,-11L),class=c(“data.table”, “data.frame”),.internal.selfref=)
它成功了。非常感谢你!!!代码
sec.axis=sec_轴(~.*100,name=“Secondary”)
不会更改用于打印的值,而只更改轴值。
sec.axis
确实只修改轴值,而不是实际数据。这就是为什么您需要添加一个比率来缩小SA1值。很高兴能帮忙;)成功了。非常感谢你!!!代码
sec.axis=sec_轴(~.*100,name=“Secondary”)
不会更改用于打印的值,而只更改轴值。
sec.axis
确实只修改轴值,而不是实际数据。这就是为什么您需要添加一个比率来缩小SA1值。很高兴能帮忙;)
library(ggplot2)
test <- read.xlsx2("filepath/test.xlsx", 1, header=TRUE)
View(test)
test$SA=as.numeric(levels(test$SA))[test$SA]
test$SA1=as.numeric(levels(test$SA1))[test$SA1]
test$SA2=as.numeric(levels(test$SA2))[test$SA2]
g <- ggplot(test,aes(x=year, y=  SA, group = 1)) + geom_line(mapping = aes(x = test$year, y = test$SA)) 
+ geom_line(mapping = aes(x = test$year, y = test$SA2), color = "red") +  geom_line(mapping = aes(x = test$year, y = test$SA1), size = 1, color = "blue")
 g+scale_y_continuous(name = "primary axis title",
+                      sec.axis = sec_axis(~./5, name = "secondary axis title (SA1)"))
ggplot(subset(DF, Var != "SA1"), aes(x = year, y = val, color = Var))+
  geom_line()+
  scale_y_continuous(name = "Primary axis", sec.axis = sec_axis(~.*100, name = "Secondary"))