code: def get_node_values(
          self, 
          feature=None, 
          show_root=False, 
          show_tips=False, 
          ):
          
          # access nodes in the order they will be plotted
          ndict = self.get_node_dict(return_internal=True, return_nodes=True)
          nodes = [ndict[i] for i in range(self.nnodes)[::-1]]
  
          # get features
          if feature:
              vals = [i.__getattribute__(feature) if hasattr(i, feature)
                      else "" for i in nodes]
          else:
              vals = [" " for i in nodes]
  
          # apply hiding rules
          if not show_root:
              vals = [i if not j.is_root() else "" for i, j in zip(vals, nodes)]
          if not show_tips:
              vals = [i if not j.is_leaf() else "" for i, j in zip(vals, nodes)]
  
          # convert float to ints for prettier printing unless all floats
          # raise exception and skip if there are true strings (names)
          try:
              if all([Decimal(str(i)) % 1 == 0 for i in vals if i]):
                  vals = [int(i) if isinstance(i, float) else i for i in vals]
          except Exception:
              pass
  
          return vals
docs: Returns node values from tree object in node plot order. To modify
          values you must modify the .treenode object directly by setting new
          'features'. For example
  
          for node in ttree.treenode.traverse():
              node.add_feature("PP", 100)
  
          By default node and tip values are hidden (set to "") so that they
          are not shown on the tree plot. To include values for these nodes
          use the 'show_root'=True, or 'show_tips'=True arguments.
  
          tree.get_node_values("support", True, True)