首页 > 解决方案 > 绘制更平滑的多条线

问题描述

我有以下数据集,其中包含三个变量,物种、二氧化碳和气孔密度。我正在寻找一个图,其中每个物种都有一条线,以显示每个物种的气孔密度如何随着二氧化碳的变化而变化。我使用了以下代码。

# Libraries
library(ggplot2)
library(dplyr)
    
# Separate into Species
don <- mydata %>% 
      filter(Species %in% c("Alnus glutinosa", "Betula pendula", "Betula pubescens", "Corylus avellana", "Quercus petrea", "Sorbus aucuparia"))
      
    # Plot
    don %>%
      ggplot( aes(x=CO2, y=Stomatal_Density, group=Species, color=Species))  +
      geom_line()

该代码有效,但是,每个情节的线条看起来并不好。

带有锯齿线的图形

我尝试替换geom_line()为,geom_smooth()但图表上没有出现线条。有没有办法让这些线条看起来更好?

更新:这是我的数据

    dput(mydata)
structure(list(Species = c("Alnus glutinosa", "Alnus glutinosa", 
"Alnus glutinosa", "Alnus glutinosa", "Alnus glutinosa", "Alnus glutinosa", 
"Betula pendula", "Betula pendula", "Betula pendula", "Betula pendula", 
"Betula pendula", "Betula pendula", "Betula pendula", "Betula pendula", 
"Betula pendula", "Betula pendula", "Betula pendula", "Betula pendula", 
"Betula pendula", "Betula pendula", "Betula pendula", "Betula pendula", 
"Betula pendula", "Betula pendula", "Betula pendula", "Betula pendula", 
"Betula pendula", "Betula pendula", "Betula pendula", "Betula pendula", 
"Betula pendula", "Betula pendula", "Betula pendula", "Betula pendula", 
"Betula pendula", "Betula pendula", "Betula pendula", "Betula pendula", 
"Betula pendula", "Betula pendula", "Betula pendula", "Betula pendula", 
"Betula pendula", "Betula pendula", "Betula pendula", "Betula pendula", 
"Betula pendula", "Betula pendula", "Betula pendula", "Betula pendula", 
"Betula pendula", "Betula pendula", "Betula pendula", "Betula pubescens", 
"Betula pubescens", "Betula pubescens", "Betula pubescens", "Betula pubescens", 
"Betula pubescens", "Betula pubescens", "Betula pubescens", "Betula pubescens", 
"Betula pubescens", "Betula pubescens", "Corylus avellana", "Corylus avellana", 
"Corylus avellana", "Corylus avellana", "Corylus avellana", "Corylus avellana", 
"Corylus avellana", "Corylus avellana", "Corylus avellana", "Corylus avellana", 
"Corylus avellana", "Corylus avellana", "Corylus avellana", "Corylus avellana", 
"Corylus avellana", "Corylus avellana", "Corylus avellana", "Corylus avellana", 
"Corylus avellana", "Corylus avellana", "Corylus avellana", "Corylus avellana","Quercus petrea", "Quercus petrea", "Quercus petrea", "Quercus petrea", 
"Quercus petrea", "Quercus petrea", "Quercus petrea", "Quercus petrea", 
"Quercus petrea", "Quercus petrea", "Quercus petrea", "Quercus petrea", 
"Quercus petrea", "Quercus petrea", "Quercus petrea", "Sorbus aucuparia", 
"Sorbus aucuparia", "Sorbus aucuparia", "Sorbus aucuparia", "Sorbus aucuparia", 
"Sorbus aucuparia", "Sorbus aucuparia", "Sorbus aucuparia"), 
    CO2 = c(356.45, 371.14, 371.14, 371.14, 375.8, 391.65, 358.87, 
    358.87, 358.87, 358.87, 358.87, 358.87, 358.87, 358.87, 358.87, 
    361.2, 361.2, 361.2, 361.2, 361.2, 363.55, 363.55, 363.55, 
    363.55, 337.86, 373.47, 373.47, 373.47, 373.47, 387.63, 389.63, 
    392.27, 392.27, 392.27, 392.27, 392.27, 392.27, 392.27, 392.27, 
    392.27, 392.27, 392.27, 392.27, 392.27, 392.27, 392.27, 392.27, 
    392.27, 392.27, 392.27, 393.83, NA, NA, 354.39, 356.46, 356.46, 
    358.87, 361.2, 353.83, 387.63, 389.63, 393.83, 409.39, 411.18, 
    356, 371.14, 371.14, 371.14, 375.8, 389.63, 389.63, 389.63, 
    389.63, 389.63, 389.63, 389.63, 389.63, 389.63, 389.63, 389.63, 
    389.63, 389.63, 389.63, 389.63, 389.63, 389.63, 291, 300.6, 
    300.6, 356.46, 356.46, 356.46, 363.55, 363.55, 366.75, 370.19, 
    370.19, 406.62, 409.39, 409.39, 409.39, 305, 356, 356, 362.61, 
    371.14, 371.14, 371.14, 377.52), SD = c(108, 218.75, 218.75, 
    92.01388889, 107.85, NA, 60, 108.1, 135.6, 128.4, 115.1, 
    202.6, 102.4, 65.9, 39.3, 45, 79.5, 105.2, 93.9, 75.3, 79.3, 
    62, 93.9, 81.4, 101, 66.8, 132.81, 132.81, 92.45, 174.6, 
    160, 243.68, 187.98, 229.76, 222.76, 208.87, 160.13, 194.95, 
    215.83, 222.79, 201.91, 208.87, 187.98, 250.64, 181.02, 292.42, 
    264.57, 257.61, 264.57, 243.68, 14, 127, 143, NA, 147, 61, 
    87.8, 65, 124.5, 111.1, 107, 12.6, 2.99, 2.99, 225, 164.9305556, 
    164.9305556, 101.5625, 84, 113.64, 95.25, 98.32, 94.38, 107.34, 83.08, 96.45, 91.48, 92.11, 90.8, 99.6, 91.45, 117.73, 83.33, 
    96.28, 88.26, 110.58, 698, 810, 468, 510, 370, 405, 47.5, 
    19.6, 4.6, 394.3, 355.1, 333, 215.14, 168.06, 175.33, 118, 
    224, 132, 132, 157.1180556, 157.1180556, 99.39236111, 73.9
    )), class = "data.frame", row.names = c(NA, -109L))

标签: rggplot2

解决方案


我想到的最好的方法是在这些点之间画一条线,也许可以将各个点改为分散。对于所有组来说,这条线似乎并不是一个很好的近似值,但也许这是一个开始。

don %>%
  ggplot( aes(x=CO2, y=SD, group=Species, color=Species))  +
  geom_point() +
  geom_smooth(method = "nls", formula = y ~ a * x + b, se = F,
              method.args = list(start = list(a = 0.1, b = 0.1)))

输出


推荐阅读