Mapping relationships between people using interactive network chart

Share

Facebook
Twitter
LinkedIn

Today, lets learn how to create an interesting chart. This, called as network chart helps us visualize relationships between various people.

Demo of interactive network chart in Excel

First take a look at what we are trying to build.

Network Relationships - Interactive Chart in Excel - Demo

Looks interesting? Then read on to learn how to create this.

Note: thanks to Hans whose email question inspired me to create this chart.

Tutorial to create interactive network chart in Excel

Note: This tutorial requires intermediate-to-advanced Excel knowledge. So if you are beginner, learn the basics & advanced concepts first and then comeback for this.

In order to create this chart in Excel, we need to first understand various ingredients of it.

As you can see, the chart contains these parts:

  1. A set of dots, each representing one stakeholder
  2. A set of grayish thick & dotted lines representing all relationships between people.
  3. A set of green thick & blue dotted lines representing relationships for the selected person.
  4. A slicer for person selection (can be replaced with list box or clickable cells in Excel 2007 or below)
  5. Summary statistics of the selected person

Getting started with the relationship data

To simplify our tutorial, lets assume we are talking about relationships between just 4 people, named Ash, Billy, Cynthia & Darren.

Our relationship matrix looks like this:

Data - Relationship matrix - network chart in Excel

  • 0 means no relationship
  • 1 means weak relationship (for example: Ash & Billy just know each other)
  • 2 means strong relationship (for example: Cynthia & Billy are friends)

The downloadable workbook is created to take up to 20 stakeholders.

Geometry of the network chart

If we draw the relationships between these 4 people (Ash, Billy, Cynthia & Darren) on a paper, it would look like this:

Hand-drawn relationship network map

The 2 things we need to determine are,

  1. The location of dots (where person names are printed)
  2. The lines (starting & ending point of lines)

Plotting dots around circle

We need to plot our dots in such a way that gap between each dot is same.  This will create a balanced chart.

What shape satisfies our need for such equal gaps? A circle of course.

Hey wait, I don’t see a circle in the chart you have shown…?

Thats right. We don’t need to draw a circle. We just need to plot dots around it.

  • So we have 4 stakeholders, we need 4 dots
  • If we have 12 stakeholders, we need 12 dots
  • If we have 20, we need 20 dots.

Assuming the origin of our circle is (x,y), radius is r and theta is 360 divided by number of dots we need,

the first dot (x1,y1) on the circle will be at this position:

x1 = x + r*COS(theta)

y1 = y + r*SIN(theta)

[Related: How to create a spoke chart in Excel]

Once all the dots are calculated & plugged in to an XY chart (scatter plot), lets move on.

Plotting the lines

Lets say we have n people in the network. So that means, each person can have a maximum of n-1 relationships.

So the total possible lines in our chart are n*(n-1)/2

We need to divide it by 2 as if A knows B, then B knows A too. But we need to draw only 1 line.

My network chart template is set up to work with up to 20 people. So that means, the maximum number of lines we can have will be 190

Each line requires a separate series to be added to the chart. That means, we need to add 190 series of data just for 20 people. And that satisfies only one type of line (either dotted or thick). If we want different lines based on type of relationship, then we need to add another 190 series.

This is painful & ridiculous.

Fortunately there is a way out.

We can use far fewer series and still plot the same chart.

Lets say we have 4 people – A B C & D. For the sake of simplicity, lets assume the co-ordinates of these 4 are

  • A – (0,0)
  • B – (0,1)
  • C – (1,1)
  • D – (1,0)

And lets say, A has relationships with B, C & D.

That means we need to draw 3 lines, from A to B, A to C & A to D.

Now, instead of supplying 3 series for the chart, what if we supply one long series that looks like this:

(0,0), (0,1), (0,0), (1,1), (0,0), (1,0)

That means we are just drawing one long line from A to B to A to C to A to D. Agreed that it is not a straight line, but Excel scatter plots can draw any line as long as you provide a set of co-ordinates.

PS: This is a trick I learned from Roberto of E90E50. He used this trick in the winning entry of our recent dashboard contest.

See this illustration to understand the technique.

Using a single series to draw multiple lines in Excel XY chart

So instead of 190 series of data for the chart, we just need 20 series.

In the final chart, we actually have 40 + 2 + 1 series of data. This is because,

  • 20 lines for weak relationships (dotted lines)
  • 20 lines for strong relationships (thick lines)
  • 1 line for highlighted person’s weak relationships
  • 1 line for highlighted person’s strong relationships
  • 1 set of no line & just dots for the people

How to generate all the 20 series of data:

This requires following logic:

  • Assuming we need lines for the relationship of person n.
  • That person’s dot location will be (Xn, Yn) and already calculated earlier (in the plotting dots around circle)
  • We need total of 40 rows of data
  • Every odd row will have (Xn, Yn)
  • For every even row
    • Divide the row number by 2 to get person number (say m)
    • (Xn,Yn) if there is no relationship between n and m
    • (Xm,Ym) if there is a relationship

We need MOD & INDEX formulas to express this logic in Excel.

Examine the download workbook to understand how its done.

Once all the line co-ordinates are calculated, add them to our scatter plot and format.

I used a macro to automate the formatting. It can be done manually too, just takes a little patience.

Slicer for selecting a person

This works only in Excel 2010 or above.

Select the first 2 columns of relationship matrix & create a pivot table.

Now, insert a slicer on Person name column.

Slicer for person selection - network chart

Using simple IF formula, extract the selected person name from pivot table (examine download file for the logic).

And using the name, extract the subset of line data to separate range (2 sets of data – one for weak & one for strong relationships)

Add this new data to our scatter plot and format.

Format the slicer (using slicer styles) so that it looks slick.

Related: formatting slicers using styles.

NOTE About Slicers: If you change or add any data, you must refresh (from Data ribbon) to update the slicer. This can be automated with a macro, but I want to keep this file macro free.

[Alternative] Selecting a person with form controls

You can use either a list box or a range of clickable cells. See the 2003 compatible download file for an example of this.

Summary statistics

Using simple formulas extract statistics for the selected person and show them near the chart.

Summary statistics - Network chart in Excel

Adding labels to the chart (person names)

In our chart, we are showing person names instead of regular label like X or Y value. This is done with value from cells label feature in Excel 2013.

Labels for Excel scatter (XY) plot - done using Excel 2013 or add-in in earlier versions

For earlier versions of Excel, I recommend using Rob Bovey’s excellent XY Chart Labels add-in.

Putting it all together

Once everything is ready, clean up the chart, slicer and other elements, put them together. And we are ready to go.

Relationship Network in an interactive Excel Chart

Download Network Relationships Interactive Chart Template

Click here to download the chart template workbook. The download is a ZIP file and it contains 3 workbooks – compatible with Excel 2013, 2010 & 2003+. Use the version that you need.

Please examine the formulas & chart settings to understand how it is constructed.

Note: Hit Refresh from Data ribbon to change slicer once you have added or modified data.

When to use network relationship chart?

A network graph is a good place to explore relationships between people in a project or team. It is especially useful when selecting a sub-set of people from large group to closely work on a project.

Any alternatives?

There is a popular Excel Add-in named NodeXL that can help you visualize and analyze relationships between people in a more in-depth fashion.

Check out Chord diagram & Cosmograph from E90E50 site for other ways to present this data.

Do you use these kind of charts?

I have used network charts earlier to depict relationships between various people or things. But I have never created such charts in Excel, I always used either Power Point or some other drawing program to create them. That is why I am excited about this chart. Figuring out the formula & graphing logic was fun.

What about you? Have you used such charts before? How do you like the network chart presented here? Please share your thoughts using comments.

 

Facebook
Twitter
LinkedIn

Share this tip with your colleagues

Excel and Power BI tips - Chandoo.org Newsletter

Get FREE Excel + Power BI Tips

Simple, fun and useful emails, once per week.

Learn & be awesome.

Welcome to Chandoo.org

Thank you so much for visiting. My aim is to make you awesome in Excel & Power BI. I do this by sharing videos, tips, examples and downloads on this website. There are more than 1,000 pages with all things Excel, Power BI, Dashboards & VBA here. Go ahead and spend few minutes to be AWESOME.

Read my storyFREE Excel tips book

Overall I learned a lot and I thought you did a great job of explaining how to do things. This will definitely elevate my reporting in the future.
Rebekah S
Reporting Analyst
Excel formula list - 100+ examples and howto guide for you

From simple to complex, there is a formula for every occasion. Check out the list now.

Calendars, invoices, trackers and much more. All free, fun and fantastic.

Advanced Pivot Table tricks

Power Query, Data model, DAX, Filters, Slicers, Conditional formats and beautiful charts. It's all here.

Still on fence about Power BI? In this getting started guide, learn what is Power BI, how to get it and how to create your first report from scratch.

25 Responses to “Shift Calendar Template – FREE Download”

  1. Alvin says:

    Hi Chandoo,

    your recent postings include only Excel 2007 templates. Unfortunately the company I work at still runs Excel 2003. Is it possible to get your awesome files in other excel version as well?

    Thanks so much for your great excel stuff!

  2. Stelios Tserkezis says:

    Is it possible to do this for shifts with hours instead of days? To organise a three shift day?

    Thanks in advance,

    Stelios

  3. MASTHAN says:

    In my organization there are 45 employees i need split then into three shifts ex:A shift:14,B shift:14,C shift:14 and week off:3 kindly help me on this.

  4. Hui... says:

    @Masthan

    You need to understand what rules your company has for the various shifts / roster combinations

  5. Georges Lacombe says:

    Chandoo, I once did a shift control spreadsheet for my team. I put one person in each line, the columns were the days. I put a shift code in each cell indicating in which shift that person should work, or if the person were out that day. I have two codes for being out. One is for vacations and one is to compensate days worked in weekends. This way I was able to count how many persons I have in each shift, how many were on vacations and how many were out compensating (that's the term we use here) weekend worked hours.
    Later I included the possibility of a person be in two lines one for normal hours other for overtime. This is mainly used for planning purposes. If you would like I can send you an example. The only problem of this spreadsheet is that we don't have a person view, only this consolidated view.

    • Chuck Vaughan says:

      Hi George, I would like to have a copy of your spreadsheet if you can share it.
       
      Thanks in advance, Chuck   

  6. Idan says:

    Hi Chandoo,

    Where is the code located ? is it VBA ? If so , how do you hide it ? Or it is .NET ?

    Thx

  7. Hui... says:

    @Idan
    .
    No VBA or code, it is all done with Mirrors.
    Only Joking,
    .
    But there is no VBA or code,
    It is all done with Named Formulas and Lookups.
    Have alook at the cells in the calander area and Named Formulas in the Formulas, Name Manager Tab.

  8. Anand Sant says:

    How can i calculate between two or more different workbooks? Please, reply me as early as possible.

    • Hui... says:

      @Anand
      Open the workbooks you want to link to
      Start a formula = and click and change between workbooks as required.
      You can use the View, Switch window menu to change workbooks mid formula

      The format for using workbooks is
      =[Workbook.xlsm]Sheet1!$A$1
      or
      =SUM('[Book2.xls]Sheet1'!$A$1:$D$10)
      etc

  9. Shemi says:

    Hi Chandoo,
    I am working with a call centre wherein i ned to update at the month end 20 to 30 employees login hours which are defict to track it at the month end is very difficult is there any template which can be made to track that why on a particular day a guy who needs to be on calls was why not on calls.

  10. Denice Lognshaw says:

    Thank you so much Chandoo. This is really helping me. As usual, you rock.

  11. Mukesh Verma says:

    What's FortyTwoDays and Calendar in Name manager?

    Both are unused and FortyTwoDays doesn't make any sense.

  12. Dave says:

    I have a SQL db that contains records of events scheduled/completed on a particular date. Can this method ous building a calendar be used to display those events on the respective day?

  13. Jan Halliday says:

    Positively awesome!
    I'm attempting to help a friend create a schedule for adult classes - and of course its not"paid help".  Here is the scenario:
    20 classes, instructor, room#, student class size, start date, number of class days (need to subtract weekends)

    class
    instructor
    room
    students
    start
    #days

    PATH
    karen
    201
    21
    01/01/13
    11

    BILLING
    jane
    401
    15
    01/12/13
    13

    MEDISOFT
    mike
    301
    11
    01/25/13
    9

    he'd like to see these classes show up in different colors within the same month's calendar chart.  He can draw it, but I'd like to see it done automatically through data, and I just can't visualize it, but I KNOW this will work - can you help?
    Jan 🙂
     

  14. Chan Tean says:

    Dear chandoo,

    Try many way to download still can't access. Any way we want to try out 3 shifts with 3 guys in a group .eg Group A Morn, Group B Night and Group C Rest. And every each group must work on sunday to take turns. In fact we are security teams so that's why sunday is required to work. Pls guide and show how to put in the working calendar. Thank you in advance.

  15. Veronica Burggren says:

    I've been trying to copy and/or recreate this to use in a workbook I'm doing for the transportation department I'm working for. I need to have the calendar on the first sheet in my document (it has graph's from data on another sheet). I'm trying to use it to track (with the conditional formatting) accidents and injuries. I've redone the conditional formatting to do 4 different accident types (no injury, near miss, OSHA recordable injury and work loss injury), but when I enter the formula's you have in the calendar portion where it says "DateOfFirst-FirstWeekDay" I can't figure out how you did that. Are you able to help?

  16. Pipin Fantom says:

    I would like to use Excel to solve the following problem for a community work. I want to create a Driver schedule for a given month from a pool of volunteers for a community service. Each of these volunteers can drive only on specific days in a week. I would like to populate the driving schedule for each weekday with primary, secondary and tertiary drivers in a random fashion so that I do not overburden one person. I would greatly any help you can provide.

  17. Ravichandra says:

    Hi chandoo,
    Thanks for your valuable effort for create this template and let me know how to add multiple employees in the the Roaster.

  18. Savitha says:

    Hi Chandoo,

    This article on shift roaster is very helpful. Could you please let me know how i can use the same for n number of resources who work 24/7, considering their leaves and holidays?

    Thanks,
    Savitha

  19. Balu says:

    Hi Chandoo,

    This article on shift roaster is very helpful to all. Could you please let me know how i can use the same if I want to add for some more shifts, since the color is not getting change if I add more shifts like 4,5 etc.,

    Thanks,
    Murali

  20. Sarah says:

    How can I change the date to 2017 under Shift Data worksheet.

  21. Cad says:

    solution 1:
    mydata=B2:C16
    stoplist=E2:E8

    =LET(RNG,A2:A16,SMR,C2:C16, F,(RNG=E2)+(RNG=E3)+(RNG=E4)+(RNG=E5)+(RNG=E6)+(RNG=E7)+(RNG=E8),SUM(SMR)-SUM(SMR*F))

    =LET(RNG,A2:A16,SMR,C2:C16,RH,N(B2:B16=B2), F,(RNG=E2)+(RNG=E3)+(RNG=E4)+(RNG=E5)+(RNG=E6)+(RNG=E7)+(RNG=E8),TOT,SUM(SMR)-SUM(SMR*RH*F),SUM(SMR*RH)-SUM(SMR* RH*F))

    ALTERNATE SOLUTION
    =SUM(C2:C16)-SUM(FILTER(C2:C16,ISNUMBER(BYROW(A2:A16,LAMBDA(a,TOROW(SEARCH(a,E2:E8),2))))))

    =SUM((B2:B16=B2)*(C2:C16))-SUM((ISNUMBER(BYROW(A2:A16,LAMBDA(a,TOROW(SEARCH(a,E2:E8),2))))*(B2:B16=B2)*(C2:C16)))

  22. Cad says:

    let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Replaced Value" = Table.ReplaceValue(Source,null,";",Replacer.ReplaceValue,{"Column1"}),
    #"Transposed Table" = Table.Transpose(#"Replaced Value"),
    #"Removed Other Columns" = Table.SelectColumns(#"Transposed Table",{"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25", "Column26", "Column27", "Column28", "Column29", "Column30", "Column31", "Column32", "Column33", "Column34", "Column35", "Column36", "Column37", "Column38", "Column39", "Column40", "Column41", "Column42", "Column43", "Column44", "Column45", "Column46", "Column47", "Column48", "Column49", "Column50", "Column51", "Column52", "Column53", "Column54", "Column55", "Column56", "Column57", "Column58", "Column59", "Column60", "Column61", "Column62", "Column63", "Column64", "Column65", "Column66", "Column67", "Column68", "Column69", "Column70", "Column71", "Column72", "Column73", "Column74", "Column75", "Column76", "Column77", "Column78", "Column79", "Column80", "Column81", "Column82", "Column83", "Column84", "Column85", "Column86", "Column87"}),
    #"Merged Columns" = Table.CombineColumns(#"Removed Other Columns",{"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column24", "Column25", "Column26", "Column27", "Column28", "Column29", "Column30", "Column31", "Column32", "Column33", "Column34", "Column35", "Column36", "Column37", "Column38", "Column39", "Column40", "Column41", "Column42", "Column43", "Column44", "Column45", "Column46", "Column47", "Column48", "Column49", "Column50", "Column51", "Column52", "Column53", "Column54", "Column55", "Column56", "Column57", "Column58", "Column59", "Column60", "Column61", "Column62", "Column63", "Column64", "Column65", "Column66", "Column67", "Column68", "Column69", "Column70", "Column71", "Column72", "Column73", "Column74", "Column75", "Column76", "Column77", "Column78", "Column79", "Column80", "Column81", "Column82", "Column83", "Column84", "Column85", "Column86", "Column87"},Combiner.CombineTextByDelimiter("|", QuoteStyle.None),"Merged"),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Merged Columns", {{"Merged", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Merged"),
    #"Added Prefix" = Table.TransformColumns(#"Split Column by Delimiter", {{"Merged", each "|" & _, type text}}),
    #"Replaced Value1" = Table.ReplaceValue(#"Added Prefix","||","|",Replacer.ReplaceText,{"Merged"}),
    #"Split Column by Delimiter1" = Table.SplitColumn(#"Replaced Value1", "Merged", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), {"Merged.1", "Merged.2", "Merged.3", "Merged.4", "Merged.5", "Merged.6", "Merged.7", "Merged.8"}),
    #"Removed Columns" = Table.RemoveColumns(#"Split Column by Delimiter1",{"Merged.1"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Columns")
    in
    #"Removed Duplicates"

Leave a Reply