How to show evolution of vertex properties?

Jun 7, 2009 at 3:45 AM
Edited Jun 7, 2009 at 3:47 AM

My data sets yields graphs where both the edge and vertex parameters change over time. 

Marc Smith taught me how to chart evolution of edge parameters: create a (say) “Period” column in the Edges sheet; every edge set representing a graph for a given period gets a distinct value in the Period column.  One can then click through the values of Period using the Dynamic Filters control on the chart.In this way, I can visualize how edge weights change from period to period, e.g. by tying Edge Weight to Edge Width using Autofill Columns on the Visual Properties ribbon.

However, I can’t figure out an equally simple way of showing vertex properties. For a given period, I show the vertex property by tying it to Vertex Size using Autofill Columns.  But the "add a period column" trick doesn't work, since it seems that vertices have to be unique in a way that edges don’t have to be.  If I add vertices with the same names but different period values to the the Vertices column, NodeXL only shows the first ones, as one might expect.

Is this right? If so, is there some other way to show both vertix size and edge width changing as one clicks through periods?  If I'm wrong, how should I do it?

I can imagine a horrid kludge to address this problem, e.g. create a new sheet with vertex properties for different periods, and then use a formula to plug in different values for Vertex Size in the Vertices sheet for different periods; the period will have to be changed by hand before running the chart.  Unfortunately, this doesn’t integrate with edge periods, and can’t be operated (as far as I can figure it) from that nifty Dynamic Filters control.

Any insights or tips greatly appreciated!

Thanks as always to Tony, Marc and the rest of the team for a super tool

--- Pierre


Jun 10, 2009 at 1:33 AM


The only way I can figure out to get your desired effect is awkward:

1. Create duplicate sets of vertices in the Vertices worksheet, distinguished from each other by a Period column in the Vertices worksheet.

2. Create sort-of-duplicate set of edges in the Edges worksheet, distinguished from each other by a Period column in the Edges worksheet (which you're doing now) AND by the vertices they contain.

For example, the Edges worksheet might look like this:

Vertex 1  Vertex 2  Period
A-Period1  B-Period1  1/1/2009
A-Period2  B-Period2  1/2/2009

and the Vertices worksheet like this:

Vertex  Period
A-Period1  1/1/2009
B-Period1  1/1/2009
A-Period2  1/2/2009
A-Period2  1/2/2009

With no filtering, you'll get duplicate graphs.  In the Dynamic Filters dialog box, though, if you set both Period filters to the same date, you'll be filtering out one of the graphs and seeing only the graph for the selected date.

Not a good solution, but I can't think of anything else at the moment.  Maybe someone else has a suggestion.

-- Tony

Jun 10, 2009 at 1:39 AM

On second thought, this won't really help because the duplicate graphs won't be on top of each other and the graph will shift around as you apply the filters.  So no, I don't know how to do this.

-- Tony

Jun 11, 2009 at 4:08 PM

I think one possible solution to this problem might be the following.

Do as Tony suggests, i.e., create 'duplicate' vertices for as many periods as you have in the dataset, but on the edge list only use the 'original' vertex names. Set their properties as needed for each period and define the 'Period' column.

Then make the X,Y coordinates of the duplicate vertices equal to the 'original' vertices by changing the cells format from 'Text' to 'General' and entering a simple formula. For example, if vertex_A's X coordinate is on cell U3, then for all intances of vertex_A (which would have a different name) you would set their X column to  '=U3'. You could also use the same approach to set any other properties you want to replicate across time periods, e.g., labels, color, size, etc.

Finally, set the visibility of the duplicate vertices to 'Show (4)' and lock them (i.e., 'Locked?' = 'Yes (1)').

To apply the temporal filters, first use any layout algorithm to layout the network. Once you're happy with the layout, change the layout to 'none' and do 'refresh graph'. From the dynamic filters dialogue you should now be able view the vertices of different time periods.

(If you don't want the 'duplicate' vertices to interfere in the original layout you might want to skip them first and only set their visibility to 'Show (4)' after the step where you set the layout to none)

-- Eduarda

Jun 13, 2009 at 11:03 PM

Thanks, Eduarda, very nice; I'll work with this.  It solves a problem with my current method has - I can't use Dynamic Filters. I'm a little confused, though; how do you align Period in the Vertices sheet with Periods in the Edges sheet?  My edge weights change with period, too.

My method doesn't require one to create duplicate vertices, and handles changes by period for both edges and vertices. FWIW, here's how it works:

Create a table containing for each vertex (rows) the time-varying parameter (columns). Define a period parameter in a controlling cell. Populate the vertex size column in the Vertices sheet using VLOOKUP of the time-varying parameter table, with the period parameter as the offset. As one changes the period parameter, the vertex size will change.  (However, this requires a 'refresh graph' every time the period parameter is changed.)

The Edges worksheet, with different edge weights for different periods, remains essentially the same. However, I use a lookup of the period parameter to hide all edges except the one for the period currently under consideration.

--- Pierre