在ggplot中使用离散类的图例

时间:2016-03-16 15:55:55

标签: r ggplot2 legend

我有一个数据框df

df<-structure(list(X = c(540.857881018969, 179.756453922596, 375.597673455575, 
-24.7802579900034, 435.072227193852, 316.91305374488, 385.910199259729, 
118.282069554042, 47.0931945371692, 46.8541543075746, -1.34917072989697, 
-7.85914134272889, -74.1514974421857, -14.1349095526425, -180.103770130757, 
-138.258618377921, 189.011576650288, 69.2480232224876, 42.356103377609, 
-330.116265944969, 12.2073132306264, 82.0963304851313, -76.2883430762099, 
13.7563014075505, 286.364096895997, 238.289414874803, 192.304857815893, 
196.85181686938, 545.585335607164, 380.551416666209, 285.533878238757, 
349.173312050698, 234.149820388793, 182.680602233473, 123.508718623119, 
-59.3666813922188, 309.812271637758, 378.745487723212, 383.286192402579, 
407.250999438653, 968.521681377846, 168.221917301957, 308.817578621267, 
187.43921153459, 219.229124870899, 273.756349813256, 330.797398870288, 
310.938292903419, 285.256002320225, 404.534158133551, 298.161606939762, 
96.4609965966811, 237.259654760246, 410.903483047603, 453.107209854966, 
476.020674679612, 390.865258755938, -148.590524527974, 109.883635942258, 
78.869912902272, 782.478670456904, 245.257050602357, 308.573221705999, 
568.136911803784, 163.617826469925, 210.109579924637, 175.657357919781, 
175.760684810558, -254.181869342232, 288.452497381572), Y = c(436.783385497984, 
55.1825021383702, 526.4133417369, 560, 391.49284084118, -519.814235572849, 
11.5525291214872, 162.441016515717, 39.0395567645998, -70.4910326673707, 
17.1155716306239, -106.326129257097, -94.9308303585276, -66.4285516217351, 
-144.929052323413, -220.613145695315, 157.129576861289, 44.1257786633602, 
46.8326830295943, -146.719591499443, 30.8043649939355, -4.10548956954153, 
-108.258462657337, 90.3369144331664, 126.866108251153, 42.9489971246803, 
690.903947139159, -45.4886732113082, 483.932040393885, 618.930183215125, 
590.754048774834, 82.1480000555981, 76.8863707484328, 404.007940533033, 
202.629066249886, -46.9675149230141, 557.939170770813, 333.76992898155, 
300.979565786038, 224.256197650044, 148.719307398695, 201.195892312115, 
466.727302447427, 552.762670615377, 595.145436977735, 481.359543363331, 
467.379381521489, 279.980726677847, 545.324660883673, 444.812610935212, 
308.198167469197, -638.973101716489, 292, 331.193419647713, 181.896345832773, 
629.214319321327, -176.181996958815, 214, 59.1716887350485, -77.1223124726675, 
-186.42650026083, 279.123776521767, 515.533437888983, 595.091753601562, 
367.15020653978, 713.607404187601, 268.681242669467, 239.81099676255, 
91.8453621773515, 246.686055020047), A = c(98.5, 77, 63.2222222222222, 
97, 52.5, 3.5, 15.5, 71, 161.833333333333, 153.5, 73, 39, 40, 
23, 14, 5.5, 78, 129.5, 73.5, 4, 100, 10, 3, 30, 65.5, 198, 26, 
45.5, 20, 42.5, 111.5, 44, 68.5, 102.5, 39.1111111111111, 83.8, 
136, 28.6666666666667, 31.5, 56.5, 101, 39.25, 108.5, 52.1666666666667, 
54.5, 9.5, 13, 8.5, 8, 52.1428571428571, 66.5, 1, 42, 45, 106, 
19, 202.571428571429, 200, 36.6, 83.75, 2, 33, 21.2, 69, 67.5, 
14, 83, 16, 4, 99)), .Names = c("X", "Y", "A"), row.names = c(1L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 
16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 
29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 
42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 51L, 52L, 53L, 54L, 
55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 63L, 64L, 65L, 66L, 67L, 
68L, 69L, 71L), class = "data.frame", na.action = structure(c(70L, 
72L, 73L, 74L, 75L, 76L, 77L, 78L, 79L, 80L, 81L, 82L, 83L, 84L, 
85L, 86L, 87L, 88L, 89L, 90L), .Names = c("70", "72", "73", "74", 
"75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", 
"86", "87", "88", "89", "90"), class = "omit"))

我正在简单的散点图中使用ggplot对Y X进行绘图。但是,我还想根据变量A添加颜色方案和图例。想法是在图例中有四个类(例如0-50,50-100,100-150和150-200)。

我只设法得到一个渐变图例:

library(ggplot2)
    ggplot(df, aes(x=X, y=Y, colour=A))+
      geom_point(shape=3)+
      geom_abline(slope=1)+
      theme_bw(base_size = 14, base_family = "Helvetica") + 
      theme(panel.grid = element_line(colour="grey", size=0.5),
            axis.text.x = element_text(hjust = 1),
            legend.position="bottom", 
            legend.box="horizontal",
            legend.key = element_blank(),
            legend.text=element_text(size=12))+
      xlab("Predicted")+
      ylab("Observed")+
      scale_colour_gradient(name= "Stand age", low= "#67a9cf", high ="#ef8a62")+
      guides(colour = guide_colourbar(title.position="top", title.hjust = 0.5),
             size = guide_legend(title.position="top", title.hjust = 0.5))

另外,我想在面板的右下角有一个图例框。谁知道怎么做?

2 个答案:

答案 0 :(得分:0)

library(ggplot2)
plt <- ggplot(df, aes(x=X, y=Y, colour=A))+
      geom_point(shape=3)+
      geom_abline(slope=1)+
      theme_bw(base_size = 14, base_family = "Helvetica") + 
      theme(panel.grid = element_line(colour="grey", size=0.5),
            axis.text.x = element_text(hjust = 1),
            legend.position=c(1, 0),
            legend.direction = "horizontal",
            legend.justification = c(1,0))+
      xlab("Predicted")+
      ylab("Observed")+
      scale_colour_gradient(name= "Stand age", low= "#67a9cf", high ="#ef8a62")+
      guides(colour = guide_colourbar(title.position="top", title.hjust = 0.5),
             size = guide_legend(title.position="top", title.hjust = 0.5))

刚刚改变,

legend.position = c(1,0)
legend.direction = "horizontal"
legend.justification = c(1,0)

答案 1 :(得分:0)

library(RColorBrewer)
library (ggplot)

vecP <- c(0, 50, 100, 150, 200, 250)
labP <- c("0-50", "50-100", "100-150", "150-200", "200-250")
df$Age <- cut(df$A, breaks=vecP, labels =labP)
colorsP <- brewer.pal(length(labP), "RdBu")
ggplot(df, aes(x=X, y=Y, colour=Age))+
  geom_point(shape=1)+
  geom_abline(slope=1)+
  theme_bw(base_size = 14, base_family = "Helvetica") + 
  theme(panel.grid = element_line(colour="grey", size=0.5),
        axis.text.x = element_text(hjust = 1),
        legend.position=c(1, 0),
        legend.direction = "vertical",
        legend.justification = c(1,0),
        legend.key = element_blank())+
  xlab("Predicted")+
  ylab("Observed")+
  scale_fill_manual(name = "Stand age", values = setNames(colorsP, labP),breaks=rev(labP),labels=rev(labP))