这是我的树:

tree = data.frame(branchID = c(1,11,12,111,112,1121,1122), length = c(32, 21, 19, 5, 12, 6, 2))

> tree
  branchID length
1        1     32
2       11     21
3       12     19
4      111      5
5      112     12
6     1121      6
7     1122      2

这棵树是二维的,由 Twig 组成。每个分支都有一个ID。 1是主干。然后,干线 fork 成两个分支,左侧为11,右侧为1211在称为111(朝左)和112(朝右)的分支中也 fork 。等等。每个分支都有一定的长度。

在这棵树上有松鼠:
squirrels = data.frame(branchID = c(1,11,1121,11,111), PositionOnBranch = c(23, 12, 4, 2, 1), name=c("FluffyTail", "Ginger", "NutCracker", "SuperSquirrel", "ChipnDale"))

> squirrels
  branchID PositionOnBranch          name
1        1               23    FluffyTail
2       11               12        Ginger
3     1121                4    NutCracker
4       11                2 SuperSquirrel
5      111                1     ChipnDale

每个松鼠都位于特定的分支上。例如,FluffyTail在主干上的位置23(主干的总长度为32)上。 ChipnDale在位置1的分支111上(分支111的总长度为5)。该位置相对于分支的下肢。

如何绘制树和松鼠?

最佳答案

我对此花费了更多的时间,并在treeshere包中打包了一些园艺功能。

使用trees,您可以:

  • seed()生成随机树设计(可以说是随机种子);
  • 播下种子,用germinate()种植一棵壮丽的树;
  • foliate()添加随机放置的叶子(或松鼠);
  • 使用squirrels()将松鼠(例如)添加到指定位置;和
  • prune()树。

  • # Install the package and set the RNG state
    devtools::install_github('johnbaums/trees')
    set.seed(1)
    

    让我们给种子施肥并长出一棵树
    # Create a tree seed
    s <- seed(70, 10, min.branch.length=0, max.branch.length=4,
              min.trunk.height=5, max.trunk.height=8)
    
    head(s, 10)
    
    #       branch    length
    # 1          0 6.3039785
    # 2          L 2.8500587
    # 3         LL 1.5999775
    # 4        LLL 1.3014086
    # 5       LLLL 3.0283486
    # 6      LLLLL 0.8107690
    # 7     LLLLLR 2.8444849
    # 8    LLLLLRL 0.4867677
    # 9   LLLLLRLR 0.9819541
    # 10 LLLLLRLRR 0.5732175
    
    # Germinate the seed
    g <- germinate(s, col='peachpuff4')
    

    并添加一些叶子
    leafygreens <- colorRampPalette(paste0('darkolivegreen', c('', 1:4)))(100)
    foliate(g, 5000, 4, pch=24:25, col=NA, cex=1.5, bg=paste0(leafygreens, '30'))
    

    或一些松鼠
    plot(g, col='peachpuff4')
    squirrels(g,
              branches=c("LLLLRRRL", "LRLRR", "LRRLRLLL", "LRRRLL", "RLLLLLR",
                         "RLLRL", "RLLRRLRR", "RRRLLRL", "RRRLLRR", "RRRRLR"),
              pos=c(0.22, 0.77, 0.16, 0.12, 0.71, 0.23, 0.18, 0.61, 0.8, 2.71),
              pch=20, cex=2.5)
    

    绘制@ Remi.b的树和松鼠
    g <- germinate(list(trunk.height=32,
                       branches=c(1, 2, 11, 12, 121, 122),
                       lengths=c(21, 19, 5, 12, 6, 2)),
                  left='1', right='2', angle=40)
    
    xy <- squirrels(g, c(0, 1, 121, 1, 11), pos=c(23, 12, 4, 2, 1),
                   left='1', right='2', pch=21, bg='white', cex=3, lwd=2)
    text(xy$x, xy$y, labels=seq_len(nrow(xy)), font=2)
    legend('bottomleft', bty='n',
          legend=paste(seq_len(nrow(xy)),
                       c('FluffyTail', 'Ginger', 'NutCracker', 'SuperSquirrel',
                         'ChipnDale'), sep='. '))
    



    编辑:

    继@baptiste关于@ScottChamberlain的rphylopic软件包的热门提示之后,是时候将这些点升级为松鼠了(尽管它们可能类似于咖啡 bean )。
    library(rphylopic)
    s <- seed(50, 10, min.branch.length=0, max.branch.length=5,
              min.trunk.height=5, max.trunk.height=8)
    g <- germinate(s, trunk.width=15, col='peachpuff4')
    leafygreens <- colorRampPalette(paste0('darkolivegreen', c('', 1:4)))(100)
    foliate(g, 2000, 4, pch=24:25, col=NA, cex=1.2, bg=paste0(leafygreens, '50'))
    xy <- foliate(g, 2, 2, 4, xy=TRUE, plot=FALSE)
    
    # snazzy drop shadow
    add_phylopic_base(
        image_data("5ebe5f2c-2407-4245-a8fe-397466bb06da", size = "64")[[1]],
        1, xy$x, xy$y, ysize = 2.3, col='black')
    add_phylopic_base(
        image_data("5ebe5f2c-2407-4245-a8fe-397466bb06da", size = "64")[[1]],
        1, xy$x, xy$y, ysize = 2, col='darkorange3')
    

    r - 如何在R中绘制树(和松鼠)?-LMLPHP

    关于r - 如何在R中绘制树(和松鼠)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28163979/

    10-12 17:52