我试图根据从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个个体_物理
任何帮助将不胜感激!
2条答案
按热度按时间rdlzhqv91#
如何使用点大小来表示种子的数量?
如果20个种子的精确阈值很重要,那么这可能不是呈现它的最佳方式,因为圆形以外的其他形状的大小可能很难看到。
更多气泡图选项在这里:https://r-graph-gallery.com/320-the-basis-of-bubble-plot.html
68de4m5k2#
这是可能的,但不建议在ggplot样式中使用,因为不是所有的形状都是可填充的。如果你仍然想这样做,那么你必须首先手动指定形状,以确保它们是可填充的。我希望下面的例子能澄清我的意思。但要注意图例不会正确显示。我找不到解决方法。
另一种选择是使用其他的美学来表示变量。也许像你建议的那样使用星号。
创建于2023-04-21使用reprex v2.0.2