Changes in version 1.0.12.9000 Changes in version 1.0.12 (2026-04-27) - The minimum R version is now 4.1 to reflect usage of the native pipe operator |>. - Fixed get_leverage_centrality() which erroneously passed the full degree vector instead of a single vertex index to igraph::neighbors() (#541). - Fixed get_authority_centrality() and get_eigenvector_centrality() to safely call igraph::hits_scores() and handle the igraph v2+ authority/hub API (#542). - Fixed GML import to correctly apply edge labels (#543). - Fixed grViz() to correctly pass options to Viz() (@cderv, #530). - Fixed edge attribute generation logic when edge attributes are empty strings (#521). - Migrated all examples and internal code from %>% to the native pipe |> (#540). Changes in version 1.0.11 (2024-02-02) - DiagrammeR now has a dependency on viridisLite instead of viridis (@olivroy, #511) - DiagrammeR nows uses testthat 3rd edition (@olivroy, #498) - No longer use deprecated features from tibble, igraph and tidyselect (>= 1.2.0) (@olivroy, #497, #507) - Error messages have been reviewed and now use cli (@olivroy, #499, #502) - It is now easier to install suggested packages on the fly. DiagrammeR now uses rlang::check_installed() internally. (@olivroy, #499) - DiagrammeR() checks the type argument more strictly. (@olivroy, #506) - DiagrammeR is compatible with igraph (>= 2.0.0) (@maelle, #500) Changes in version 1.0.10 (2023-05-18) - Remove dependency on the influenceR package, which also means removing the get_constraint() and get_bridging() graph inspection functions. (#486) Changes in version 1.0.9 (2022-03-05) - More safely check inputs to grViz() and mermaid() Changes in version 1.0.8 (2022-01-24) - Reduce minimum R version requirement. Changes in version 1.0.7 (2022-01-15) - Fix malformed CSS selector in htmlwidgets/grViz.js - Fixes for dev tidyr. Only call replace_na(replace = "") on character columns. (@DavisVaughan, #448) - Added the envir argument to the grViz() and replace_in_spec() functions. (@atusy, #408) Changes in version 1.0.6.1 (2020-05-08) - Removed the set_df_as_node_attr(), set_df_as_edge_attr(), and get_attr_dfs() functions. Changes in version 1.0.5 (2020-01-16) - Removes the ability to save a DiagrammeR graph object as a Gephi file (.gexf) since the rgexf package is no longer maintained. Changes in version 1.0.0 (2018-03-01) - Added the helper functions node_aes(), node_data(), edge_aes(), and edge_data() to facilitate the binding of node and edge aesthetic and data attribute values; several functions now have namesake arguments that accept these functions' output. - Added traversal functions trav_in_until() and trav_out_until(). - Information about the graph is now displayed in the console when the graph object is called - Error messages are now more helpful and try to provide pointers for the more common errors. Deprecated - create_complement_graph() is deprecated in favor of create_graph() + transform_to_complement_graph(). - create_subgraph_ws() is deprecated in favor of create_graph() + transform_to_subgraph_ws(). - edge_rel() is deprecated in favor of graph$edges_df$rel for edge relationships. - create_random_graph() is deprecated in favor of create_graph() + add_gnm_graph(), add_growing_graph(), add_islands_graph(), add_smallworld_graph() for the creation of randomized graphs. Functions renamed: (old functions were removed) - add_to_series() -> add_graph_to_graph_series() - remove_from_series() -> remove_graph_from_graph_series() - get_graph_from_series() -> get_graph_from_graph_series() - create_series() -> create_graph_series() - subset_series() -> filter_graph_series() - render_graph_from_series() -> render_graph_from_graph_series() - series_info() -> get_graph_series_info() - graph_count() -> count_graphs_in_graph_series() - graph_info() -> get_graph_info() - node_present() -> is_node_present() - edge_present() -> is_edge_present() - edge_count() -> count_edges() - node_count() -> count_nodes() - edge_info() -> get_edge_info() - node_info() -> get_node_info() - node_type() -> get_node_attrs() - get_global_graph_attrs() -> get_global_graph_attr_info() - get_min_spanning_tree() -> transform_to_min_spanning_tree() Functions removed: cache_edge_attrs(), cache_edge_attrs_ws(), cache_edge_count_ws(), cache_node_attrs(), cache_node_attrs_ws(), cache_node_count_ws(), clear_global_graph_attrs(), image_icon(), set_global_graph_attrs(). Functions added add_node_clones_ws(), count_loop_edges(), count_s_connected_cmpts(), count_unconnected_nodes(), count_w_connected_cmpts(), delete_cache(), delete_loop_edges_ws(), deselect_edges(), deselect_nodes(), fully_connect_nodes_ws(), fully_disconnect_nodes_ws(), get_edge_df_ws(), get_node_df_ws(), is_graph_undirected(), set_graph_directed(), set_edge_attr_to_display() Changes in version 0.9.2 (2017-09-06) - Added functions to generate 2D and 3D grid graphs (add_grid_2d() and add_grid_3d()) - Added _ws() (with selection) variants of the mutate_[node/edge]_attrs() functions for mutating node or edge attributes for only those nodes/edges in an active selection - Incorporated an edges argument into the select_edges() function in order to filter the selection of edges to a set of edge ID values - Reduced the dependency on R to version >= 3.2.0 Changes in version 0.9.1 (2017-08-21) - Simplified many functions internally - Added a default print method for graph objects - Allowed use of bare node or edge attribute names in many functions - Implemented graph actions as a means to run one or more functions at every graph transformation step; for example, this can be used to automatically update a node attribute such as betweenness whenever modifications to the graph are made (e.g., adding nodes, removing edges, etc.) - Data frames can be set as node or edge attributes with the set_df_as_node_attr() and set_df_as_edge_attr() functions; the get_attr_dfs() function allows for retrieval of stored data frame data - Added two new graph-generating functions (add_gnp_graph(), add_pa_graph(), and create_complement_graph()) - Added functions to clone existing nodes and edges (add_n_node_clones() and add_edge_clone()) - Added several count_* functions (count_asymmetric_node_pairs(), count_automorphisms(), etc.) - Added new functions to obtain graph properties (get_adhesion(), get_girth(), get_reciprocity(), etc.) - Added several is_* functions for graph and edge properties (e.g., is_edge_loop(), is_graph_dag(), etc.) - The mutate_node_attrs() and mutate_edge_attrs() functions now have simpler and more powerful interfaces for mutating node and edge attributes - Graphs can be easily saved to disk (and read from disk) using the save_graph() and open_graph() functions Changes in version 0.9.0 (2017-01-03) - Modified basic structure of node and edge data frames such that ID values are automatically set as integer values - Just as nodes do, edges now have edge ID values (they can be obtained using get_edge_ids() and they can be used directly in the select_edges_by_edge_id() function) - When created, a graph object automatically generates a graph ID and graph name (which can be modified using set_graph_name()) - So long as node label values are unique, they may now be used to compose edges using the add_edge() function with use_labels = TRUE - Quickly and flexibly add color to nodes and edges using the colorize_node_attrs() and colorize_edge_attrs() functions - Added functions to selectively modify existing node and edge attributes: copy_[node/edge]_attrs(), drop_[node/edge]_attrs(), mutate_[node/edge]_attrs(), recode_[node/edge]_attrs(), rename_[node/edge]_attrs(), and rescale_[node/edge]_attrs(). - New node and edge attributes can now be easily added to a graph via a data frame using the join_node_attrs() and join_edge_attrs() functions - Several graph generators are available for quickly adding graph primitives to a graph object (add_balanced_tree(), add_cycle(), add_full_graph(), add_path(), add_prism(), and add_star()) - All traversal functions can now migrate numeric node or edge attribute values to the traversed edges (e.g., trav_out_edge(), trav_in_node()) by providing an attribute name to copy_attrs_from(); for those traversal functions where nodes or edges may receive multiple values, one can specify an aggregation type in their agg argument (e.g,. trav_in_node(), trav_both_edge()) - Multiple conditions can be specified for all traversal types and for the select_nodes() and select_edges() functions, plus, they are much easier to write - Added the mk_cond() helper function for creating conditions for any of the traversal functions (trav_...()), and, the select_nodes() and select_edges() functions; this helper allows for easier composition of selection/traversal conditions using variables and/or function calls - With a selection of edges one can now use select_rev_edges_ws() to transform that selection to that of the selected edges' reverse edges (where available); the option is there to add the reverse edges to the edge selection or to simply replace the current selection - Caching attributes for later use has been made simpler with a collection of cache_...() functions (or, set the cache explicitly using set_cache()); get the graph's cache using the get_cache() function - Added functions to allow for layout control of nodes (set_node_position(), layout_nodes_w_string(), nudge_node_positions()) - Added functions to convert DiagrammeR graphs to igraph graphs and vice versa (to_igraph(), from_igraph()) - Now you can create a graph from an adjacency matrix (from_adj_matrix()) - Added functions to get community membership with a variety of algorithms: get_cmty_edge_btwns(), get_cmty_fast_greedy(), get_cmty_l_eigenvec(), get_cmty_louvain(), and get_cmty_walktrap(). - Added functions to determine similarity coefficient scores for graph nodes: get_dice_similarity() and get_dice_similarity(). - Constraint scores for nodes can now be determined using the get_constraint() function - Functions for getting information on nodes neighbors have been added: get_nbrs(), get_non_nbrs(), get_similar_nbrs(). - Groups of nodes that are weakly or strongly connected components can be determined using the get_w_connected_cmpts() and get_s_connected_cmpts() functions - Get articulation points (i.e., nodes that, when removed, disconnect the graph) with the get_articulation_points() function - Obtain centrality measures for graph nodes using the get_closeness() and get_betweenness() functions - Get the minimum-spanning tree subgraph from a graph with weighted edges using the get_min_spanning_tree() function - The edge direction may be reversed for an entire graph (rev_edge_dir()) or for part of a graph using an edge selection (rev_edge_dir_ws()) - Depth-first search and breadth-first search algorithms are available in the do_dfs() and do_bfs() functions - Degree data for plots can now be easily obtained using the get_degree_distribution() and get_degree_histogram() functions - Global graph attributes are now more easily modifiable using a set of functions for this purpose: add_global_graph_attrs(), delete_global_graph_attrs(), get_global_graph_attr_info(). - Added option to display different text labels on nodes via the display node attribute; this is easily set with the set_node_attr_to_display() function - Rewrote many graph functions (e.g. traversals) so that they are faster for very large graphs - A log of all graph functions that directly modify the graph is now part of the graph object (graph$graph_log) - Added functionality to automatically generate graph backups at every graph modification; this is in the form of RDS files deposited in a subdirectory (name is based on the graph ID) of the working directory; the option (write_backups, set to FALSE by default) is available in all functions that initialize a graph object (create_graph(), create_random_graph(), from_igraph(), from_adj_matrix()) Changes in version 0.8 (2015-10-08) - Revised many graph functions so they work better together - Added many testthat tests to maintain the quality of the graph functions - Added functions create_random_graph(), import_graph(), combine_graphs(), country_graph() and select_graph_from_series() - Added support for visNetwork graphs as a rendering option with render_graph() Changes in version 0.7 (2015-06-11) - Renamed functions graphviz_graph() and graphviz_render() to create_graph() and render_graph(), respectively - Removed function graphviz_export() (exporting now handled with render_graph()) - Added several new functions to inspect, analyze, and modify graphs: display_graph_object(), node_info(), edge_info(), node_present(), edge_present(), get_nodes(), get_edges(), get_predecessors(), get_successors(), node_count(), edge_count(), is_graph_empty(), is_graph_directed(), add_node(), add_edges(), delete_node(), delete_edge(), node_type(), edge_relationship(), create_series(), add_to_series(), remove_from_series(), graph_count(), subset_series(), trigger_script(), render_graph_from_series(), and series_info() Changes in version 0.6 (2015-04-30) - Added several functions to work with graphs: create_node_df(), create_edges(), combine_nodes(), combine_edges(), scale_nodes(), scale_edges(), get_nodes(), node_info(), graphviz_graph(), graphviz_render(), and graphviz_export() - Removed the graphviz_nodes_edges_df() and graphviz_single_df() functions Changes in version 0.5 (2015-03-19) - Added support for subgraphs and Gantt charts in mermaid diagrams - Added function graphviz_nodes_edges_df() for generating Graphviz DOT code that defines nodes and edges (and their attributes) from data in two data frames: one for nodes, the other for the edge operations - Added function graphviz_single_df() for generating Graphviz DOT code from a single data frame - Incorporated the new substitution operators @_{...} or @^{...} in grViz statements for subscripting and superscripting, respectively Changes in version 0.4 (2015-01-30) - Added support for substitution in Graphviz graph specifications - Added support for Graphviz diagrams in the Shiny app Changes in version 0.3 - Added support for the Graphviz neato, twopi, and circo engines Changes in version 0.2 - Added the viz.js library to enable Graphviz support Changes in version 0.1 (2015-01-09) - Initial release - Incorporated into the htmlwidgets framework - Added basic shiny app