我有一个data.frame(汇总表):
head(hejALLA)
variable År N Sum Mean sd Variance Median Min Max
1 N_kvinnor 1944 28 2419650 86416.07 223776.7 50076008602 54003.0 413 1209825
2 N_kvinnor 1945 28 2595794 92706.93 240100.4 57648222451 58040.0 459 1297897
3 N_kvinnor 1946 29 2752518 94914.41 250209.5 62604783658 55624.0 470 1376259
4 N_kvinnor 1947 30 2865208 95506.93 255979.9 65525698129 50186.5 468 1432604
5 N_kvinnor 1948 30 2993572 99785.73 267368.3 71485801980 52581.0 461 1496786
6 N_kvinnor 1949 35 3108982 88828.06 257942.9 66534536980 48729.0 456 1554491
dput(hejALLA)
structure(list(variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L
), .Label = c("N_kvinnor", "N_män"), class = "factor"), År = c(1944L,
1945L, 1946L, 1947L, 1948L, 1949L, 1950L, 1951L, 1952L, 1953L,
1954L, 1944L, 1945L, 1946L, 1947L, 1948L, 1949L, 1950L, 1951L,
1952L, 1953L, 1954L), N = c(28, 28, 29, 30, 30, 35, 37, 37, 37,
37, 33, 28, 28, 29, 30, 30, 35, 37, 37, 37, 37, 33), Sum = c(2419650,
2595794, 2752518, 2865208, 2993572, 3108982, 3223124, 3341098,
3461784, 3547744, 3375942, 2275460, 2415543, 2558005, 2653682,
2760069, 2851398, 2947550, 3040133, 3144944, 3190284, 2960046
), Mean = c(86416.0714285714, 92706.9285714286, 94914.4137931034,
95506.9333333333, 99785.7333333333, 88828.0571428571, 87111.4594594595,
90299.9459459459, 93561.7297297297, 95884.972972973, 102301.272727273,
81266.4285714286, 86269.3928571429, 88207.0689655172, 88456.0666666667,
92002.3, 81468.5142857143, 79663.5135135135, 82165.7567567568,
84998.4864864865, 86223.8918918919, 89698.3636363636), sd = c(223776.693607701,
240100.442420795, 250209.479552851, 255979.878367345, 267368.289032438,
257942.894804022, 260324.366472718, 269857.390823679, 279547.104579955,
286473.142701748, 287193.206911879, 210220.469220861, 223156.992413054,
232223.774918247, 236806.100206249, 246289.093343316, 236350.737393712,
237813.20060053, 245315.995040117, 253783.749535529, 257471.044723456,
251390.219349299), Variance = c(50076008601.9947, 57648222450.6614,
62604783658.1084, 65525698128.9609, 71485801980.1333, 66534536979.879,
67768775779.4219, 72823011382.1637, 78146583679.036, 82066861489.4159,
82479938096.3295, 44192645679.4392, 49799043262.84, 53927881637.2808,
56077129094.892, 60658317499.8724, 55861671066.5513, 56555118379.8679,
60179937422.5225, 64406191528.3123, 66291338870.988, 63197042384.4886
), Median = c(54003, 58040, 55624, 50186.5, 52581, 48729, 43842,
44712, 46106, 47298, 54758, 50976, 54560, 56087, 49240.5, 51312.5,
42191, 39722, 40397, 41574, 42091, 48537), Min = c(413, 459,
470, 468, 461, 456, 455, 445, 435, 416, 1850, 360, 409, 418,
401, 386, 369, 364, 357, 346, 332, 4572), Max = c(1209825, 1297897,
1376259, 1432604, 1496786, 1554491, 1611562, 1670549, 1730892,
1773872, 1687971, 1139425, 1209436, 1280617, 1328515, 1381879,
1427689, 1475842, 1522245, 1574886, 1597663, 1480023)), .Names = c("variable",
"År", "N", "Sum", "Mean", "sd", "Variance", "Median", "Min",
"Max"), row.names = c(NA, -22L), class = "data.frame")
然后我正在创建一个包含函数multiplot
multiplot <- function(..., plotlist=NULL, file, cols=1, layout=NULL) {
require(grid)
# Make a list from the ... arguments and plotlist
plots <- c(list(...), plotlist)
numPlots = length(plots)
# If layout is NULL, then use 'cols' to determine layout
if (is.null(layout)) {
# Make the panel
# ncol: Number of columns of plots
# nrow: Number of rows needed, calculated from # of cols
layout <- matrix(seq(1, cols * ceiling(numPlots/cols)),
ncol = cols, nrow = ceiling(numPlots/cols))
}
if (numPlots==1) {
print(plots[[1]])
} else {
# Set up the page
grid.newpage()
pushViewport(viewport(layout = grid.layout(nrow(layout), ncol(layout))))
# Make each plot, in the correct location
for (i in 1:numPlots) {
# Get the i,j matrix positions of the regions that contain this subplot
matchidx <- as.data.frame(which(layout == i, arr.ind = TRUE))
print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row,
layout.pos.col = matchidx$col))
}
}
}
我想要与上述功能结合使用两个图:
plotONE=ggplot(subset(hejALLA,variable=="N_män"), aes(x = År)) +
geom_line(aes(y = Mean, color = "Medelvärde delägare män",linetype = "Medelvärde delägare män"),
size = 1.7, alpha = 1) +
geom_ribbon(aes(ymax = Max,
ymin = Min, fill = "Delägare Män Max/Min"), color="blue",linetype = 3,
alpha = 0.2) +
geom_ribbon(aes(ymax = Mean+sd, ymin = Mean-sd, fill = "Mean +- sd"),
colour = "black", linetype = 2, alpha = 0.5)+
#geom_line(aes(y = Sum,
#color = "Sum Delägare Män"), size = 0.9, linetype = 1, alpha = 1) +
geom_line(aes(y = N,
color = "Antal Kassor",linetype="Antal Kassor"), size = 0.9, alpha = 1)+
scale_y_continuous(breaks = seq(-200000, 1700000, by = 50000), limits = c(-200000, 1700000),
labels = seq(-200000, 1700000, by = 50000))+
scale_x_continuous(breaks=seq(1944,1954,1))+
labs(title = "Manliga Delägare",x="Year\n",y="Value\n") +
scale_color_manual("Variabler", breaks = c("Antal Kassor","Medelvärde delägare män"),
values = c("Antal Kassor" = "black", "Medelvärde delägare män" = "#6E6E6E")) +
scale_fill_manual(" Ribbons", breaks = c("Delägare Män Max/Min", "Mean +- sd"),
values = c(`Delägare Män Max/Min` = "blue", `Mean +- sd` = "red")) +
scale_linetype_manual("Variabler",values=c("Antal Kassor"=2,"Medelvärde delägare män"=1))+
theme(legend.direction = "horizontal", legend.position = "bottom", legend.key = element_blank(),
legend.background = element_rect(fill = "white", colour = "gray30")) +
guides(fill = guide_legend(keywidth = 2, keyheight = 1), linetype=guide_legend(keywidth = 3, keyheight = 1),
colour=guide_legend(keywidth = 6, keyheight = 1)) +
coord_cartesian(ylim = c(-200000, 1700000),xlim=c(1944,1954))+
theme(axis.text.x = element_text(hjust=0.5, size=9,colour="black",face="bold"),
axis.text.y = element_text(size=9,colour="black",face="bold"),
#panel.grid.minor = element_blank(),
#panel.background = element_blank(), #färgen på backgrunden. Vill ej ha nån (vit) så tar bort.
axis.ticks = element_blank(), ##Ska det gå en linje från siffrorna på axlarna?
plot.title = element_text(size = rel(1.2)),
axis.title.y = element_text(size = rel(1.1)),
axis.title.x=element_text(size = rel(1.1)))
plotTWO=ggplot(subset(hejALLA,variable=="N_kvinnor"), aes(x = År)) +
geom_line(aes(y = Mean, color = "Medelvärde delägare kvinnor",linetype = "Medelvärde delägare kvinnor"),
size = 1.7, alpha = 1) +
geom_ribbon(aes(ymax = Max,
ymin = Min, fill = "Delägare Kvinnor Max/Min"), color="blue",linetype = 3,
alpha = 0.2) +
geom_ribbon(aes(ymax = Mean+sd, ymin = Mean-sd, fill = "Mean +- sd"),
colour = "black", linetype = 2, alpha = 0.5)+
#geom_line(aes(y = Sum,
#color = "Sum Delägare Män"), size = 0.9, linetype = 1, alpha = 1) +
geom_line(aes(y = N,
color = "Antal Kassor",linetype="Antal Kassor"), size = 0.9, alpha = 1)+
scale_y_continuous(breaks = seq(-200000, 2100000, by = 50000), limits = c(-200000, 2100000),
labels = seq(-200000, 2100000, by = 50000))+
scale_x_continuous(breaks=seq(1944,1954,1))+
labs(title = "Kvinnliga Delägare",x="Year\n",y="Value\n") +
scale_color_manual("Variabler", breaks = c("Antal Kassor","Medelvärde delägare kvinnor"),
values = c("Antal Kassor" = "black", "Medelvärde delägare kvinnor" = "#6E6E6E")) +
scale_fill_manual("Ribbons", breaks = c("Delägare Kvinnor Max/Min", "Mean +- sd"),
values = c("Delägare Kvinnor Max/Min" = "blue", `Mean +- sd` = "red")) +
scale_linetype_manual("Variabler",values=c("Antal Kassor"=2,"Medelvärde delägare kvinnor"=1))+
theme(legend.direction = "horizontal", legend.position = "bottom", legend.key = element_blank(),
legend.background = element_rect(fill = "white", colour = "gray30")) +
guides(linetype=guide_legend(keywidth = 3, keyheight = 1),fill = guide_legend(keywidth = 2, keyheight = 1),
colour=guide_legend(keywidth = 6, keyheight = 1)) +
coord_cartesian(ylim = c(-200000, 2100000),xlim=c(1944,1954))+
theme(axis.text.x = element_text(hjust=0.5, size=9,colour="black",face="bold"),
axis.text.y = element_text(size=9,colour="black",face="bold"),
#panel.grid.minor = element_blank(),
#panel.background = element_blank(), #färgen på backgrunden. Vill ej ha nån (vit) så tar bort.
axis.ticks = element_blank(), ##Ska det gå en linje från siffrorna på axlarna?
plot.title = element_text(size = rel(1.2)),
axis.title.y = element_text(size = rel(1.1)),
axis.title.x=element_text(size = rel(1.1)))
然后我打电话给:
multiplot(plotONE,plotTWO, cols=2)
result
是:
我无法理解为什么2张图片底部的legend
会发生变化,即为什么Variabler
和Ribbons
会在2张图片中发生变化...... < / p>
有什么想法吗?
最诚挚的问候!
EDIT
如果我尝试在guides
内使用order
,则结果如下:
plotTWO=ggplot(subset(hejALLA,variable=="N_kvinnor"), aes(x = År)) +
geom_line(aes(y = Mean, color = "Medelvärde delägare kvinnor",linetype = "Medelvärde delägare kvinnor"),
size = 1.7, alpha = 1) +
geom_ribbon(aes(ymax = Max,
ymin = Min, fill = "Delägare Kvinnor Max/Min"), color="blue",linetype = 3,
alpha = 0.2) +
geom_ribbon(aes(ymax = Mean+sd, ymin = Mean-sd, fill = "Mean +- sd"),
colour = "black", linetype = 2, alpha = 0.5)+
#geom_line(aes(y = Sum,
#color = "Sum Delägare Män"), size = 0.9, linetype = 1, alpha = 1) +
geom_line(aes(y = N,
color = "Antal Kassor",linetype="Antal Kassor"), size = 0.9, alpha = 1)+
scale_y_continuous(breaks = seq(-200000, 2100000, by = 50000), limits = c(-200000, 2100000),
labels = seq(-200000, 2100000, by = 50000))+
scale_x_continuous(breaks=seq(1944,1954,1))+
labs(title = "Kvinnliga Delägare",x="Year\n",y="Value\n") +
scale_color_manual("Variabler", breaks = c("Antal Kassor","Medelvärde delägare kvinnor"),
values = c("Antal Kassor" = "black", "Medelvärde delägare kvinnor" = "#6E6E6E")) +
scale_fill_manual("Ribbons", breaks = c("Delägare Kvinnor Max/Min", "Mean +- sd"),
values = c("Delägare Kvinnor Max/Min" = "blue", `Mean +- sd` = "red")) +
scale_linetype_manual("Variabler",values=c("Antal Kassor"=2,"Medelvärde delägare kvinnor"=1))+
theme(legend.direction = "horizontal", legend.position = "bottom", legend.key = element_blank(),
legend.background = element_rect(fill = "white", colour = "gray30")) +
guides(fill = guide_legend(keywidth = 2, keyheight = 1,order=2), linetype=guide_legend(keywidth = 3, keyheight = 1,order=1),
colour=guide_legend(keywidth = 6, keyheight = 1)) +
coord_cartesian(ylim = c(-200000, 2100000),xlim=c(1944,1954))+
theme(axis.text.x = element_text(hjust=0.5, size=9,colour="black",face="bold"),
axis.text.y = element_text(size=9,colour="black",face="bold"),
#panel.grid.minor = element_blank(),
#panel.background = element_blank(), #färgen på backgrunden. Vill ej ha nån (vit) så tar bort.
axis.ticks = element_blank(), ##Ska det gå en linje från siffrorna på axlarna?
plot.title = element_text(size = rel(1.2)),
axis.title.y = element_text(size = rel(1.1)),
axis.title.x=element_text(size = rel(1.1)))
所以我得到3个传说......
有什么想法吗?
答案 0 :(得分:2)
要更改多个图例的顺序,您应在函数order=
和guides()
中添加参数guide_legend()
,其中数字对应于排序,例如1或2.
如果有合并的图例/比例,那么两个图例的order=
应设置相同。
在这种特殊情况下,colour=
和linetype=
图例会合并在一起,因此两者都应具有相同的order=1
值。
因为有两个情节,所以两者都添加相同的顺序以具有相同的图例外观。
+guides(fill = guide_legend(keywidth = 2, keyheight = 1,order=2),
linetype=guide_legend(keywidth = 3, keyheight = 1,order=1),
colour=guide_legend(keywidth = 6, keyheight = 1,order=1))