[Request] Ideas for creating specific directed graphs in R

Hi all, I am currently a relatively new R student working on a project with a professor of mine with the goal of it being to eventually create a package that is able to obtain data from a Twitter account and, after proper cleaning and processing of data, produce a directed graph replicating graphs from artist Mark Lombardi. Mark Lombardi created drawings in the form of graphs that detailed alleged political frauds and conspiracies.

What I am currently trying to do is to recreate the following graph in R

It has been quite struggling for me to try and recreate this graph. Right now I am not worried about the actual contents/labels of the vertices and directions of the graph, rather just creating an example.

The main problems I am facing are that my professor specified that I should place outliers on the outside circle, with all the other content inside the circle. I have no idea how to go about accomplishing this. I have tried creating 2 iGraph objects or 2 ggplot objects and tried combining them, however i cannot find a way to do that or even find a consistent way to layer them because the iGraph layout changes everytime it gets created even if I set a seed. I assume the way to do this is something to do with how I build my adjacency matrix, but the other part of that problem would be figuring out how to get a consistent layout every time.

Here's the code I have so far and the example that I have tried to work on.

#import data

net_nodes = read_csv("https://www.dropbox.com/s/ieaoo7efx87etyk/Dataset1-Media-Example-NODES.csv?dl=1")
net_edges = read.csv("https://www.dropbox.com/s/s4mli5l6j30gc5n/Dataset1-Media-Example-EDGES.csv?dl=1")
#Create an adjacency matrix for net_edges
net_edges_mat = as.matrix(net_edges)

First I created an adjacency matrix for some random dummy data.

netgraph1 = graph_from_data_frame(d=net_edges, vertices=net_nodes, directed=FALSE) 

df4 = net_edges$from
df5 = net_edges$to

lombardi1 = plot(netgraph1, main = "Lombardi Graph", frame = TRUE, edge.arrow.size=.5, vertex.color = "salmon", vertex.label=net_nodes$media, vertex.label.color="black", vertex.size = 7, edge.curved = .5, edge.width=2, shape='sphere')
#lines(df4,df5, col = "red",)

lombardi2 = tkplot(netgraph1, main = "Network Graph Ex", frame = TRUE, edge.arrow.size=.5, vertex.color = "salmon", vertex.label=net_nodes$media, vertex.label.color="black", vertex.size = 7, vertex.label.family = "Times", edge.curved = .5,)

And then I created a couple of graphs. With the first graph, I cannot figure out a way to get a consistent layout everytime I run it. If I could figure out a way to do that then I would try and mess with my matrix and try to add outliers and run it again to see a difference, but I cannot visualize a difference without a consistent graph.
As for the tkplot graph, I am able to manipulate the layout in a circle, but it just puts everything on the edge of the circle which I don't want either.
(It won't let me post more than 1 image because I'm a new user but just imagine a simple undirected graph with about 12 vertices. Feel free to run the code in R to see the graphs)

I hope I provided enough insight to describe my goals and what my problems are. Again, I am rather new to R and this is my first package I am trying to develop so I am learning as much as I can and appreciate any and all help/tips. I know this is a big project and request but I am just looking for help with pushing me towards the right direction because I just feel lost right now. Thank you everyone.

1 Like

Hi, and welcome!

Not sure I'm doing you any favor, but

We have shown that bipartite planar graphs, and series-parallel graphs with a fixed planar embedding, do not always have planar Lombardi drawings, even though their low degeneracy implies that they always have (non-planar) Lombardi drawings

Eppstein, David. 2019. Bipartite and Series-Parallel Graphs Without Planar Lombardi Drawings

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.