首页 > 解决方案 > 将带有标签的额外形状添加到 ggplot2 图例

问题描述

我有一个从两个数据集制作的图表。大点代表来自一种设备的一些数据,小圆圈代表来自另一种设备的数据。我真的很希望小圆圈出现在传说中。

在此处输入图像描述

我认识到我可以重新排列它,使所有点都在一行中,然后我仔细定义大小和形状,并以这种方式获得图例中的小点。有点像这个解决方案,但更复杂https://community.rstudio.com/t/adding-manual-legend-to-ggplot2/41651 我宁愿在图例中添加一个小圆圈并将其称为“UVP”有没有办法做到这一点?这是我想做的,但在inkscape中手动

在此处输入图像描述

生成下面第一个图的代码:

绘图数据

data1 <- structure(list(depth = c(10, 30, 50, 70, 90, 112.5, 137.5, 162.5, 
187.5, 225, 275, 325, 375, 425, 475, 525, 575, 625, 675, 725, 
775, 825, 875, 925, 975, 1050, 1150, 1250, 1350, 1450, 1550, 
1650, 1750, 1850, 1950, 2100, 2300, 2500), tot_flux2 = c(493.391307122024, 
88.4282572468022, 119.17354992495, 88.3420136880856, 55.6404426882139, 
23.1812327572326, 25.1107180682511, 27.4461496846079, 27.3648719079245, 
27.6454688644806, 29.8468118472875, 29.5852880741345, 26.9364421983894, 
29.599067987919, 28.0689550543691, 26.9607925818058, 22.6299786403629, 
21.8274647606067, 21.0185519382918, 18.2901098011584, 18.7644342604331, 
13.302886924911, 12.4073411713533, 10.70527639076, 10.3989475670089, 
11.1680615919731, 12.2697553616111, 14.9529491605114, 16.4925253769608, 
16.8444291402253, 14.6677394251565, 13.5512808553714, 14.6541054086481, 
15.2447655630027, 14.9427390135369, 12.2641023852846, 11.0432543841414, 
10.4113941660271)), row.names = c(NA, -38L), class = c("tbl_df", 
"tbl", "data.frame"))

data2 <- structure(list(Class = c("Organic", "Organic", "Organic", "Organic", 
"Organic", "Organic", "Organic", "Organic", "Organic", "Organic", 
"Organic", "Organic", "Organic"), Depth = c(69, 73, 148, 365, 
452, 965, 100, 100, 120, 120, 150, 159, 180), TrapID = c("4-22", 
"1-12", "1-12", "3-21", "3-21", "4-13", "2-14", "2-17", "3-15", 
"3-18", "2-17", "1-19", "3-18"), TrapType = c("cone", "cone", 
"cone", "net", "net", "net", "cone", "cone", "cone", "cone", 
"net", "cone", "net"), SampleType = c("plus.p", "plus.p", "plus.p", 
"plus.p", "plus.p", "plus.p", "top", "top", "top", "top", "top", 
"top", "top"), C_flux = c(1.86346195335968, 0.33708698993135, 
0.287766715331808, 0.342070253658537, 0.53058016195122, 0.162216257196462, 
0.237619178449906, 1.16823528498024, 0.82924427637051, 1.18838025889328, 
0.316782054545455, 0.420967185507246, 0.448680747228381), C_flux_umol = c(155.288496113307, 
28.0905824942792, 23.980559610984, 28.5058544715447, 44.215013495935, 
13.5180214330385, 19.8015982041588, 97.3529404150198, 69.1036896975425, 
99.0316882411067, 26.3985045454545, 35.0805987922705, 37.3900622690318
)), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-13L), spec = structure(list(cols = list(Class = structure(list(), class = c("collector_character", 
"collector")), Depth = structure(list(), class = c("collector_double", 
"collector")), TrapID = structure(list(), class = c("collector_character", 
"collector")), TrapType = structure(list(), class = c("collector_character", 
"collector")), SampleType = structure(list(), class = c("collector_character", 
"collector")), C_flux = structure(list(), class = c("collector_double", 
"collector")), C_flux_umol = structure(list(), class = c("collector_double", 
"collector"))), default = structure(list(), class = c("collector_guess", 
"collector")), skip = 1), class = "col_spec"))

制作情节

library(ggplot2)
library(tidyverse)
library(cowplot)

data1 %>%
  ggplot(aes(y = depth))  + scale_y_reverse(limits = c(1000, 0)) +
  scale_x_continuous(limits = c(0, 200)) +
  geom_point(aes(y = Depth, x = C_flux_umol, fill = SampleType, shape = TrapType),
             colour = "black", stroke = 1, size = 5, data = data2) +
  geom_point(aes(x = tot_flux2)) +
scale_shape_manual(values = c(25, 22))+
  scale_size_manual(values = c(3, 4)) +
  ylab("Depth (m)") + xlab("Flux micro-mol/m^2/day") +
    guides(fill = guide_legend(override.aes = list(shape = 25))) +
  theme_cowplot()

标签: rggplot2

解决方案


即使您添加了比例,您之前似乎也没有将尺寸用作映射美学。因此,您可以简单地将较小的点映射到大小比例。下面的例子:

data1 %>%
  ggplot(aes(y = depth))  + 
  scale_y_reverse(limits = c(1000, 0)) +
  scale_x_continuous(limits = c(0, 200)) +
  geom_point(aes(y = Depth, x = C_flux_umol, fill = SampleType, 
                 shape = TrapType),
             colour = "black", stroke = 1, size = 4, data = data2) +
  geom_point(aes(x = tot_flux2, size = "UVP")) +
  scale_shape_manual(values = c(25, 22))+
  scale_size_manual(values = 1) +
  ylab("Depth (m)") + xlab("Flux micro-mol/m^2/day") +
  guides(fill = guide_legend(override.aes = list(shape = 25))) +
  theme_cowplot()

在此处输入图像描述

您可以通过将尺寸比例替换为 来删除“尺寸”标题scale_size_manual(values = 1, name = "")


推荐阅读