R ggplot 2美学:基于3个独立变量的颜色、点形状和点填充/未填充

slmsl1lt  于 2023-04-27  发布在  其他
关注(0)|答案(2)|浏览(128)

我试图根据从6个不同地点收集的数据绘制过去几十年树木种子宽度的图表。我希望图表根据数据集中的不同条件具有几个特征:
1.颜色表示收集数据的站点
1.点形状表示数据的类型(在我的例子中,这是从站点范围的调查或从单个树收集的数据)
1.点填充/未填充表示在给定年份内从特定地点称重的样品是否超过/低于20个。
我已经成功地得到了前两个,产生了下面的图表:

我现在正在努力弄清楚最后一部分。我想可能只是在我的数据集中添加一列,其中包含与我希望根据两个变量(数据类型和样本计数)绘制的形状相对应的数字,然后在geom_point形状参数中使用该列,但我不确定如何做到这一点。
我以前做过一个图,在那里我不需要指定数据类型,所以我使用ifelse语句创建一个新的列,其中的数字对应于我想要的形状,这取决于是否有超过/低于20个种子,但我不知道如何在这种情况下使用4种可能的组合来做到这一点。它看起来像这样:编辑:我实际上刚刚意识到下面的代码不工作...

# if length >20 make it a circle (1 in ggplot2 shape arg), if <20 make it a cross (4 in ggplot 2 shape arg)

phys_MLW$pt_shape <- ifelse(phys_MLW$no_seeds > 20, '1', '4')

然后我在我的geom_point形状美学中使用了这个新列,它起作用了。所以我猜沿着这些路线的东西会对我目前的问题起作用?
下面是我的代码,它生成了上图中的图形:

# yearly variation in width
    
ggplot(phys_MLW, aes(x = year, y = avg_width, color = site)) + 
  geom_point(aes(shape = data_collection), size = 2.5) + 
  geom_line() + 
  scale_x_continuous(breaks = round(seq(min(phys_MLW$year),
                     max(phys_MLW$year), by = 2))) + 
  labs(x = "Year", y = "Average Width", col = "Site") + 
  scale_shape(name = "Source of samples", labels = c("Individual trees", "Sitewide"))

编辑:这里是我使用的数据的一个(希望)复制/可粘贴的例子:
site year avg_width no_seeds data_collection NETTLEBED 2007 6.7925 36 indiv_phys NETTLEBED 2009 6.825555556 30 site_phys本韦尔2007 8.14 30 site_phys BENWELL 2019 8.039333333 50 indiv_phys FISH HILL 2007 7.241975309 32 indiv_phys FISH HILL 2009 6.7 8 site_phys SPENNYMOOR 2007 7.260606061 11 site_phys SPENNYMOOR 2019 7.057037037 38 indiv_phys PATCHAM PLACE 2007 6.920952381 29 indiv_phys PATCHAM PLACE 2009 6.99 30 site_phys RIPON 2007 6.635416667 16 site_phys RIPON 2008 6.35037037 10个个体_物理
任何帮助将不胜感激!

rdlzhqv9

rdlzhqv91#

如何使用点大小来表示种子的数量?

library(ggplot2)
dat <- data.frame(site = rep(c("A", "B", "C"), each = 4),
                  year = rep(2011:2014, times = 3),
                  avg_width = runif(n = 12, min = 6, max = 8),
                  no_seeds = sample(3:30, size = 12, replace = TRUE),
                  data_collection = sample(c("indiv", "site"), size = 12, replace = TRUE))

ggplot(dat, aes(x = year, y = avg_width, color = site, size = no_seeds)) + 
  geom_point(aes(shape = data_collection)) + 
  geom_line(linewidth = 1) +
  scale_size(range = c(1, 10), breaks = c(5, 10, 15, 20, 25))

如果20个种子的精确阈值很重要,那么这可能不是呈现它的最佳方式,因为圆形以外的其他形状的大小可能很难看到。
更多气泡图选项在这里:https://r-graph-gallery.com/320-the-basis-of-bubble-plot.html

68de4m5k

68de4m5k2#

这是可能的,但不建议在ggplot样式中使用,因为不是所有的形状都是可填充的。如果你仍然想这样做,那么你必须首先手动指定形状,以确保它们是可填充的。我希望下面的例子能澄清我的意思。但要注意图例不会正确显示。我找不到解决方法。
另一种选择是使用其他的美学来表示变量。也许像你建议的那样使用星号。

library(tidyverse)

mtcars |> 
  ggplot(aes(x = mpg,y = hp,
             color = factor(cyl),
             shape = ifelse(disp > 300,TRUE,FALSE),
             label = ifelse(wt > 2.6,"*",""))) + 
  geom_point(size = 2) + 
  geom_line() +
  geom_text(nudge_y = +20) + 
  labs(shape = "Disp > 300",
       caption = "* indicates wt > 2.6",
       color = "Cyl") +
  scale_shape_manual(values = c(21,24)) +
  scale_fill_manual(values = c("black","pink")) + 
  theme_minimal(base_size = 16)

创建于2023-04-21使用reprex v2.0.2

相关问题