/flavor_db2.0

updated version of flavor_db with new ingredients and chemical compounds added

Primary LanguageHTML

Food Pairing and Data Science

Vincent Choo

Introduction

Food pairing is a principle for deciding which foods, when eaten together, are better flavor-wise. One study, Flavor network and the principles of food pairing published in Nature, found that Western cooking, for example, prefers to pair foods when they share many flavors, as opposed to Eastern cooking, which tends to pair foods when they contrast flavor-wise. When combined with knowledge of what foods are central to each culture, it then becomes possible to derive insights what gives each cuisine its style.

Hypothetically, a fusion restuarant might choose to cook in a distinctly Eastern style (contrasting flavors) using mostly Western ingredients. It might even be possible to generate new cuisine styles that are designed to be as different as possible from existing styles. However, before any of that happens, we'll need data on food, and lots of it.

Overview

First, we'll need a database of flavor compounds in each kind of food ingredient. Several databases concerning food exist, such as FoodDB, FlavorNet, and FlavorDB, but not all associate foods with the compounds they contain. The one at FlavorDB does, so we can scrape our data from the FlavorDB website.

Once we have the data, we'll need it in a form that we can easily manipulate. Pandas DataFrames are a good choice - they're effectively small databases that we can access and manipulate with the power of Python's other libraries, and without the need for a SQL-like syntax.

Then, we'll be able to run all sorts of nice data visualizations and analysis methods on our DataFrames.

Acquiring Data

First things first - how do we go about scraping the data from FlavorDB?

The general steps to data scraping are:

  1. Download the JSON files which describe the chemical makeup of the food.
    • Find the URLs which have the JSON files.
    • Iterate over the URLs that have these JSON files, and download the data in them.
  2. Process the JSON data by converting it into a Pandas Dataframe.
  3. Clean the DataFrame.

Steps 1-2: JSON Files

A quick inspection of the FlavorDB website reveals that all of the JSON files we want are at https://cosylab.iiitd.edu.in/flavordb/entities_json?id=x, where x is an integer. Then it's a cinch to write a few functions which go to those addresses and converts those JSON files into dictionaries.

# import the relevant Python packages
!pip install mpld3
!pip install "git+https://github.com/javadba/mpld3@display_fix"
!pip install colour

# for basic data science
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math

# for downloading files off the internet
import urllib.request
import json
import time


# for network graphs
from colour import Color
from matplotlib.collections import LineCollection
import networkx as nx
import mpld3
Requirement already satisfied: mpld3 in /home/jovyan/.local/lib/python3.6/site-packages
�[33mYou are using pip version 9.0.3, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.�[0m
Collecting git+https://github.com/javadba/mpld3@display_fix
  Cloning https://github.com/javadba/mpld3 (to display_fix) to /tmp/pip-s3uo8vu6-build
  Requirement already satisfied (use --upgrade to upgrade): mpld3==0.3.1.dev1 from git+https://github.com/javadba/mpld3@display_fix in /home/jovyan/.local/lib/python3.6/site-packages
�[33mYou are using pip version 9.0.3, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.�[0m
Requirement already satisfied: colour in /opt/conda/lib/python3.6/site-packages
�[33mYou are using pip version 9.0.3, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.�[0m
# JSON files are at addresses of this form
def flavordb_entity_url(x):
    return "https://cosylab.iiitd.edu.in/flavordb/entities_json?id="+str(x)


# translates the JSON file at the specified web address into a dictionary
def get_flavordb_entity(x):
    # source: https://stackoverflow.com/questions/12965203/how-to-get-json-from-webpage-into-python-script
    with urllib.request.urlopen(flavordb_entity_url(x)) as url:
        return json.loads(url.read().decode())
    return None

Those dictionaries contain a lot of unnecessary information, which is why we need to specify what fields we want (and, for ease of use, what we want to rename them to).

# the names of the "columns" in the raw JSON objects
def flavordb_entity_cols():
    return [
        'entity_id', 'entity_alias_readable', 'entity_alias_synonyms',
        'natural_source_name', 'category_readable', 'molecules'
    ]


# what we want to rename the JSON object "columns" to
def flavordb_df_cols():
    return [
        'entity id', 'alias', 'synonyms',
        'scientific name', 'category', 'molecules'
    ]


# "subcolumns" in the "molecules" column that we are interested in
def molecules_df_cols():
    return ['pubchem id', 'common name', 'flavor profile']    

Steps 3-4: Downloading & Cleaning

We still haven't actually wrote anything that executes - just a bunch of definitions. Right now, we need to define a bunch of stuff as setup. Then, when we download the JSON data later, we can immediately pipeline it through processing and cleaning.

The end goal is to have the data in a consistent, easy to access format. That means that I want two databases, one associating foods with food compounds, and another associating food compounds with flavors. The database columns should have the following types:

  • 'entity id' and 'pubchem id' to be type int
  • 'alias', 'scientific name', 'category', and 'common name' to be type str
  • 'synonyms' and 'flavor profile' should be type set(str)
  • 'molecules' should be a set(int)

When these columns are initially downloaded, some of them, such as 'scientific name', have mixed types - they have both strings and some other value (in this case, NaN). Fortunately, not too many columns have mixed types. In particular, (if you do some preliminary work and examine the JSON files,) the columns 'entity id', 'pubchem id', and 'common name' don't require type checking, so we don't have to process those at all.

The other small thing that do here is call str.lower() on all of the strings, just so it's easier to type and it can match other recipes more easily.

def clean_flavordb_dataframes(flavor_df, molecules_df):
    """
    Helps ensure consistent intra-column typing and converts all strings to lowercase.
    """
    strtype = type('')
    settype = type(set())
    
    # ensuring that these columns have type str
    for k in ['alias', 'scientific name', 'category']:
        flavor_df[k] = [
            elem.strip().lower() if isinstance(elem, strtype) else ''
            for elem in flavor_df[k]
        ]
    
    # ensuring that these columns are always a set of str
    def map_to_synonyms_set(elem):
        if isinstance(elem, settype):
            return elem
        elif isinstance(elem, strtype):
            # if it's a string of a set,
            if elem[0] == '{' and elem[-1] == '}':
                # convert it to a set
                return eval(elem)
            else:
                # else it's probably directly from source
                return set(elem.strip().lower().split(', '))
        else:
            return set()
    
    flavor_df['synonyms'] = [
        map_to_synonyms_set(elem)
        for elem in flavor_df['synonyms']
    ]
    
    molecules_df['flavor profile'] = [
        set([x.strip().lower() for x in elem])
        for elem in molecules_df['flavor profile']
    ]
    
    return [
        flavor_df.groupby('entity id').first().reset_index(),
        molecules_df.groupby('pubchem id').first().reset_index()
    ]

This is where most of the work is done. get_flavordb_dataframes() is the code that ties together all three steps of data scraping: downloading, processing, and cleaning. It even handles errors, for when a JSON page is missing.

# generate dataframes from some of the JSON objects
def get_flavordb_dataframes(start, end):
    """
    Download JSON data, converts it to DataFrames, and cleans them.
    
    Returns DataFrames for both foods and molecules, as well as missing JSON entries.
    """
    # make intermediate values to make dataframes from
    flavordb_data = []
    molecules_dict = {}
    missing = [] # numbers of the missing JSON files during iteration
    
    flavordb_cols = flavordb_entity_cols()
    
    for i in range(start, end):
        # we use a try-except here because some of the JSON pages are missing
        try:
            # 1: Find the JSON file. Gets the ith food entity, as a JSON dict
            fdbe = get_flavordb_entity(i + 1)

            # get only the relevant fields (columns) of the dict
            flavordb_series = [fdbe[k] for k in flavordb_cols[:-1]]
            flavordb_series.append( # convert the field to a set
                set([m['pubchem_id'] for m in fdbe['molecules']])
            )
            flavordb_data.append(flavordb_series)

            # update the molecules dataframe with the data in 'molecules' field
            for m in fdbe['molecules']:
                if m['pubchem_id'] not in molecules_dict:
                    molecules_dict[m['pubchem_id']] = [
                        m['common_name'],
                        set(m['flavor_profile'].split('@'))
                    ]
        except urllib.error.HTTPError as e:
            if e.code == 404: # if the JSON file is missing
                missing.append(i)
            else:
                raise RuntimeError(
                    'Error while fetching JSON object from ' + flavordb_entity_url(x)
                ) from e
            
    # generate the dataframes
    flavordb_df = pd.DataFrame(
        flavordb_data,
        columns=flavordb_df_cols()
    )
    molecules_df = pd.DataFrame(
        [
            [k, v[0], v[1]]
             for k, v in molecules_dict.items()
        ],
        columns=molecules_df_cols()
    )
    
    # clean up the dataframe columns
    flavordb_df, molecules_df = clean_flavordb_dataframes(flavordb_df, molecules_df)
    
    return [flavordb_df, molecules_df, missing]

It takes a long time to download all of these JSON files. If the code somehow crashes, we'll lose all of our download progress in a few short seconds. Therefore, it's a good idea to save the download progress.

# updates & saves the download progress of your dataframes
def update_flavordb_dataframes(df0, df1, ranges):
    """
    Adds more data to the specified DataFrames, and saves them as CSV files.
    
    If successful, returns the specified DataFrames, now updated, and any missing JSON files.
    """
    df0_old = df0
    df1_old = df1
    missing_old = []

    # time how long it took to download the files
    start = time.time()
    
    # for each range in ranges, save your progress.
    # don't continue with the program unless everything succeeds!
    try:
        for a, b in ranges:
            df0_new, df1_new, missing_new = get_flavordb_dataframes(a, b)
            
            df0_old = df0_old.append(df0_new, ignore_index=True)
            df1_old = df1_old.append(df1_new, ignore_index=True)
            missing_old.extend(missing_new)
        
        return df0_old, df1_old, missing_old
    except:
        raise # always throw the error so you know what happened
    finally:
        # even if you throw an error, you'll have saved them as csv files
        df0_old.to_csv('flavordb.csv')
        df1_old.to_csv('molecules.csv')

        end = time.time()
        mins = (end - start) / 60.0
        print('Downloading took: '+ str(mins) + ' minutes')

As of today, it looks like FlavorDB has about 1,000 distinct foods (entities). We'll get the first 1,000 foods we find, and save our progress about every 50 or so foods downloaded.

# take new dataframes
df0 = pd.DataFrame(columns=flavordb_df_cols())
df1 = pd.DataFrame(columns=molecules_df_cols())

# fill the DataFrames with JSON files up to id = 1000
ranges = [(50 * i, 50 * (i + 1)) for i in range(20)]
# update & save the dataframes as csv files
update_flavordb_dataframes(df0, df1, ranges)

Creating a DataFrame from a CSV file is a lot faster than downloading and creating one from the internet. In a perfect world, we wouldn't need to, but in the interest of saving time, I've made these methods so that I don't need to redownload the DataFrames every time I make an edit to the code. They load the DataFrames from CSV files and recover the information about what JSON IDs are missing.

# get the missing entries
def missing_entity_ids(flavor_df):
    """
    Get the IDs of the missing JSON entries for this particular food DataFrame.
    """
    out = []
    entity_id_set = set(flavor_df['entity id'])
    for i in range(1, 1 + max(entity_id_set)):
        if i not in entity_id_set:
            out.append(i)
    return out


# loads the dataframes from csv files
def load_db():
    settype = type(set())
    
    df0 = pd.read_csv('flavordb.csv')[flavordb_df_cols()]
    df0['synonyms'] = [eval(x) if isinstance(x, settype) else x for x in df0['synonyms']]
    df0['molecules'] = [eval(x) for x in df0['molecules']]
    
    df1 = pd.read_csv('molecules.csv')[molecules_df_cols()]
    df1['flavor profile'] = [eval(x) for x in df1['flavor profile']]
    
    df0, df1 = clean_flavordb_dataframes(df0, df1)
    return df0, df1, missing_entity_ids(df0)

Okay, now we can finally display a few rows of our DataFrames.

# missing_ids = the missing ids that are less than the max one found
flavor_df, molecules_df, missing_ids = load_db()
flavor_df.to_csv('flavordb.csv')
molecules_df.to_csv('molecules.csv')
flavor_df.head()
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
entity id alias synonyms scientific name category molecules
0 1 bakery products {bakery products} poacceae bakery {27457, 7976, 31252, 26808, 22201, 26331}
1 2 bread {bread} poacceae bakery {1031, 1032, 644104, 527, 8723, 31260, 15394, ...
2 3 rye bread {rye bread} rye bakery {644104, 7824, 643731, 8468, 1049, 5372954, 80...
3 4 wheaten bread {soda scones, soda farls} wheat bakery {6915, 5365891, 12170, 8082, 31251, 7958, 1049...
4 5 white bread {white bread} wheat bakery {7361, 994, 10883, 7362, 11173, 5365891, 11559...
molecules_df.head()
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
pubchem id common name flavor profile
0 4 1-Aminopropan-2-ol {fishy}
1 49 3-Methyl-2-oxobutanoic acid {fruity}
2 58 2-oxobutanoic acid {sweet, creamy, caramel, lactonic, brown}
3 70 4-Methyl-2-oxovaleric acid {fruity}
4 72 3,4-Dihydroxybenzoic Acid {mild, balsamic, phenolic}
print('Missing IDs: ' + str(missing_ids))
Missing IDs: [406, 407, 420, 479, 483, 599, 605, 666, 681, 689, 692, 760, 761, 779, 797, 798, 801, 802, 804, 808, 809, 811, 812, 813, 816, 819, 838, 844, 866, 877, 888, 892, 903, 910, 922, 940, 946, 957, 966, 973, 974, 975, 976]

One last check: what are the values in category?

str(set(flavor_df['category']))
"{'spice', 'beverage caffeinated', 'seed', 'additive', 'fruit', 'vegetable', 'herb', 'vegetable root', 'vegetable tuber', 'vegetable fruit', 'legume', 'meat', 'vegetable stem', 'beverage', 'maize', 'berry', 'cabbage', 'beverage alcoholic', 'plant', 'fish', 'dish', 'essential oil', 'plant derivative', 'fungus', 'seafood', 'bakery', 'fruit citrus', 'cereal', 'gourd', 'dairy', 'nut', 'fruit-berry', 'flower', 'fruit essence'}"

Oops. It looks like we still have some more data cleaning to do. What's the difference between a vegetable, fruit, and vegetable fruit? How come cabbage gets its own category? Let's take a closer look. If we take a quick glance through the names of every food in FlavorDB (output not included), we'll notice a few strange things:

aliases_by_category = ''
for c in set(flavor_df['category']):
    aliases_by_category += (
        c + ': '
        + str(list(flavor_df[flavor_df['category'] == c]['alias']))
        + '\n\n'
    )
# check out the output of this yourself, if you like
# print(aliases_by_category)

It looks like some entries/categories were made erroneously (see elderberry, cornbread, japanese pumpkin). A few looked incorrect but were correct (corn salad, or cornsalad, is a type of leafy vegetable), but a lot were seemed like they were sorted to make sure no one category is too large. However, I can see signficant differences in flavor between categories.

We're mostly interested in the ingredients list, not in finished products like cornbread, so we'll keep only raw ingredients, remove a few outliers, and give them each a food group:

(Also: woah! Apparently tobacco is a food.)

def food_groups():
    return set([
        'grain', 'vegetable', 'fruit', 'protein',
        'dairy', 'fat', 'sugar', 'seasoning',
        'beverage', 'alcohol'
    ])


# don't worry about the details in this! It's just a lot of sorting.
def get_food_group(food, category):
    """
    Maps each food category to a food group.
    
    The food groups include the main five: grain, vegetable, fruit, protein,
    dairy, fat, and sugar. However, they also include others: seasonings,
    beverages, alcohol.
    """
    
    out = None # return None if you don't know/want to classify it
    
    # broadly classify the major food groups
    if category in ['bakery', 'vegetable tuber', 'cereal']:
        out = 'grain'
    elif category in [
        'flower', 'fungus', 'plant', 'cabbage',
        'vegetable fruit', 'herb', 'gourd', 'vegetable'
    ]:
        out = 'vegetable'
    elif category in [
        'fruit-berry', 'berry', 'fruit', 'fruit citrus'
    ]:
        out = 'fruit'
    elif category in [
        'legume', 'nut', 'seed', 'seafood', 'fish', 'meat'
    ]:
        out = 'protein'
    elif category in ['dairy']:
        out = 'dairy'
    elif category in [
        'fruit essence', 'additive', 'spice', 'essential oil'
    ]:
        out = 'seasoning'
    elif category in ['beverage alcoholic']:
        out = 'alcohol'
    elif 'beverage' in category:
        out = 'beverage'
    elif category == 'maize':
        if food in ['corn', 'sweetcorn']:
            out = 'vegetable'
        elif food in ['cornbread', 'corn grits', 'popcorn']:
            out = 'grain'
        elif food == 'corn oil':
            out = 'fat'
    elif category == 'plant derivative':
        if (any(x in food for x in ['sauce', 'vinegar', 'cocoa'])
            or food in ['creosote', 'storax']):
            # creosote is what gives smoky foods that smoky flavor
            # storax is...weird
            out = 'seasoning'
        elif 'seed' in food or food == 'peanut butter':
            # cottonseeds are now available for people to eat!
            out = 'protein'
        elif any([x in food for x in ['butter', 'oil']]):
            out = 'fat'
        elif food == 'fermented tea':
            out = 'beverage'
        elif food in ['honey', 'chocolate', 'chocolate spread']:
            out = 'sugar'
        elif food == 'macaroni':
            out = 'grain'
        elif food in ['jute', 'tofu']:
            out = 'vegetable'
        elif food == 'soy yogurt':
            out = 'dairy'
    elif category == 'additive':
        if 'sugar' in food or food in [
            'fruit preserve', 'syrup', 'icing', 'molasses'
        ]:
            out = 'sugar'
        elif 'margarine' in food or food in ['cooking oil', 'shortening']:
            out = 'fat'
        elif food in ['sauce', 'gelatin dessert', 'spread', 'topping', 'water']:
            out = None # don't know how to classify these items
        elif food == 'stuffing':
            out = 'grain'
        else:
            out = 'seasoning'
    
    # cover exceptions to the rule
    if (
        any([
            food == x + ' oil'
            for x in ['soybean', 'cooking', 'fish', 'peanut', 'canola', 'corn']
        ])
        or food in ['butter', 'ghee']
        or (' butter' in food and food != 'peanut butter')
        or 'margarine' in food
    ):
        out = 'fat'
    elif food in [
        'sugar', 'honey', 'molasses', 'agave', 'dulce de leche'
    ]:
        # these were classified under 'additives/dairy/plant derivative'
        out = 'sugar'
    elif food in ['irish moss', 'kelp', 'kombu', 'wakame']:
        # these were classified under 'seafood'
        out = 'vegetable'
    elif food in ['butternut squash', 'winter squash', 'japanese pumpkin']:
        # these were classified under 'fruit'
        out = 'vegetable'
    elif food in ['sweet custard', 'candy bar', 'chocolate mousse', 'fudge']:
        out = 'sugar'
    elif 'cocoa' in food:
        out = 'seasoning'

    return out


# make a DataFrame saving the results & food groups
ridf = flavor_df.copy() # ridf = raw ingredients df
ridf['group'] = [
    get_food_group(ridf.at[i, 'alias'], ridf.at[i, 'category'])
    for i in ridf.index
]
ridf = ridf[[
    g is not None
    for g in ridf['group']
]]
ridf = ridf.reset_index()
ridf.head()
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
index entity id alias synonyms scientific name category molecules group
0 0 1 bakery products {bakery products} poacceae bakery {27457, 7976, 31252, 26808, 22201, 26331} grain
1 1 2 bread {bread} poacceae bakery {1031, 1032, 644104, 527, 8723, 31260, 15394, ... grain
2 2 3 rye bread {rye bread} rye bakery {644104, 7824, 643731, 8468, 1049, 5372954, 80... grain
3 3 4 wheaten bread {soda scones, soda farls} wheat bakery {6915, 5365891, 12170, 8082, 31251, 7958, 1049... grain
4 4 5 white bread {white bread} wheat bakery {7361, 994, 10883, 7362, 11173, 5365891, 11559... grain

Exploratory Data Analysis

Preliminary Analysis

Done! Now we have a large database of foods. But how comprehensive is the data? Let's check by looking for some odd foods.

foods = ['caramel', 'urchin', 'liver',
         'blood', 'cheese', 'pawpaw', 'rose',
         'durian', 'squirrel', 'kombu', 'whale',
         'white fish', 'whitefish']

# check if any food matches (or is a substring of) an alias in the database
{f : any([f in alias for alias in ridf['alias']])
 for f in foods}
{'caramel': False,
 'urchin': False,
 'liver': False,
 'blood': False,
 'cheese': True,
 'pawpaw': True,
 'rose': True,
 'durian': True,
 'squirrel': True,
 'kombu': True,
 'whale': True,
 'white fish': False,
 'whitefish': True}

Hmmm. This database is not exactly complete. While the database certainly includes some uncommon foods like whale, durian, paw-paw, and rose, it is also missing others such as sea urchin, liver, and blood (see black pudding). In addition, common terms, like "white fish", which refers to several species of fish, are left out entirely ("whitefish" refers to a single species of fish).

Of course, we wouldn't expect this database to have the food compounds of caramel, because even today, the process of caramelization is extremely complex and not well-understood, so complete information on caramel shouldn't be there.

Now that's out of the way, it's time for analysis and visualizations!

Similar Foods

Which foods are most similar to each other? From the previously mentioned Nature article, the mean number of shared compounds per recipe is given by msc():

def get_food(food_name, fdf):
    return fdf[[
        (fdf.at[i, 'alias'] == food_name
         or food_name in fdf.at[i, 'synonyms'])
        for i in fdf.index
    ]]


def get_molecules(food_name, fdf):
    out = list(get_food(food_name, fdf)['molecules'])
    if len(out) > 1:
        raise ValueError('food ' + food_name + ' has more than one entry')
    return out[0]
    
    
def msc(foods, fdf, **kwargs):
    """
    Return the mean shared compounds (MSC) for a given recipe (set of foods),
    i.e. sum(# shared compounds per 2 foods) / (# of combinations of 2 foods)
    """
    use_index = kwargs.get('use_index', False)
    if use_index:
        mols = [fdf.at[i, 'molecules'] for i in foods]
    else:
        mols = [get_molecules(f, fdf) for f in foods]
    
    nr = len(foods)
    out = 0
    for i in range(nr):
        for j in range(i + 1, nr):
            out += len(mols[i].intersection(mols[j]))
    out *= 2.0 / (nr * (nr - 1))
    return out

Since we only have ~1,000 foods in our DataFrame, it's not too expensive to find the MSC between every two foods. Then, we can look for "clusters" of similar foods and ones that very different from one another.

def block_msc(foods0, foods1, fdf, **kwargs):
    """
    Get the MSC when comparing each of the foods in foods0 to each of the foods in foods1.
    """
    len0 = len(foods0)
    len1 = len(foods1)
    
    out = np.ndarray((len0, len1))
    for i in range(len0):
        for j in range(len1):
            out[i][j] = msc([foods0[i], foods1[j]], fdf, **kwargs)
    
    return out


def intragroup_msc(foods, fdf, **kwargs):
    lenf = len(foods)
    food_msc = block_msc(foods, foods, fdf, **kwargs)
    
    out = []
    for i in range(lenf):
        out.append([])
        for j in range(1 + i, lenf):
            out[-1].append(food_msc[i][j])
    
    return out


def flatten(ls):
    return [x for sublist in ls for x in sublist]
msc_data = flatten(intragroup_msc(ridf.index, ridf, use_index=True))

Now that we have the MSC between all pairs of food, let's see how many compounds foods normally share:

print('Average: ' + str(np.average(msc_data)))
print('Median: ' + str(np.median(msc_data)))

fignum = 1
plt.hist(msc_data, bins=list(range(60)))
plt.title('Figure ' + str(fignum) + ':\nFrequency of Mean Shared Compounds')
plt.xlabel('mean shared compounds')
plt.ylabel('frequency')
plt.show()
fignum += 1
Average: 21.7043497344
Median: 3.0

png

This shouldn't be that surprising; only similar foods (like beef and pork) should have similar compounds in them. The vast majority of foods taste really different from one another!

But wait, how similar are foods inside and outside their own food groups? To visualize that, use a violin plot:

def make_violin_plot(x, y, **kwargs):
    xl = kwargs.get('x_label', '')
    yl = kwargs.get('y_label', '')
    t = kwargs.get('title', '')
    w = kwargs.get('widths', 4)
    fs = kwargs.get('figsize', (10, 7.5))
    
    # create a sufficiently wide violin plot, with a median
    fig, ax = plt.subplots(nrows=1, ncols=1, figsize=fs)
    ax.violinplot(y, x, widths=w, showmedians=True)
    plt.xlabel(xl)
    plt.ylabel(yl)
    plt.title(t)

Huh. Looks like there are small groups of fats, vegetables, proteins, and dairy products that taste similar within themselves. Interesting.

food_grouped = ridf.groupby(by='group')

x = list(food_groups())
xtic = list(range(len(x)))
y = [
    flatten(intragroup_msc(list(group.index), ridf, use_index=True))
    for fg, group in food_grouped
]
make_violin_plot(
    xtic,
    y,
    widths=0.9,
    x_label='food group',
    y_label='intragroup MSC'
)
plt.xticks(xtic, x)
plt.title('Figure ' + str(fignum) + ':\nDistribution of Intra-group MSC across Food Groups')
plt.show()
fignum += 1

png

We should also double check if our results (the number of shared compounds) match the existing literature has reported:

# from Figure 3 of the Nature article,
expected_num_compounds = [
    {'lemon': 69, 'shrimp': 63, 'shared': 9},
    {'coffee': 132, 'beef': 97, 'shared': 102}
]

print('Expected # of compounds:')
for x in expected_num_compounds:
    print(x)
print('')

print('Actual # of compounds:')
actual_num_compounds = []
for f0, f1, s in expected_num_compounds:
    # food 1, food 2, shared
    # get the molecules in each food
    mols = [get_molecules(x, ridf) for x in [f0, f1]]
    mols.append(mols[0].intersection(mols[1]))
    mols = [len(x) for x in mols]
    print({k: v for k, v in zip([f0, f1, s], mols)})
Expected # of compounds:
{'lemon': 69, 'shrimp': 63, 'shared': 9}
{'coffee': 132, 'beef': 97, 'shared': 102}

Actual # of compounds:
{'lemon': 193, 'shrimp': 76, 'shared': 17}
{'coffee': 269, 'beef': 92, 'shared': 37}

Looks like our database (FlavorDB) is somewhat different from the one that they used (which was derived from Fenaroli's Handbook of Flavor Ingredients). However, we might still be able to get useful information out of an analysis.

msc_matrix = block_msc(ridf.index, ridf.index, ridf, use_index=True)
ridf['msc sum'] = [
    sum(msc_matrix[i]) - msc_matrix[i][i]
    for i in ridf.index
]
ridf.head()
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
index entity id alias synonyms scientific name category molecules group msc sum
0 0 1 bakery products {bakery products} poacceae bakery {27457, 7976, 31252, 26808, 22201, 26331} grain 261.0
1 1 2 bread {bread} poacceae bakery {1031, 1032, 644104, 527, 8723, 31260, 15394, ... grain 39386.0
2 2 3 rye bread {rye bread} rye bakery {644104, 7824, 643731, 8468, 1049, 5372954, 80... grain 5497.0
3 3 4 wheaten bread {soda scones, soda farls} wheat bakery {6915, 5365891, 12170, 8082, 31251, 7958, 1049... grain 1017.0
4 4 5 white bread {white bread} wheat bakery {7361, 994, 10883, 7362, 11173, 5365891, 11559... grain 748.0
def make_network(edge_df, source, dest, **kwargs):
    """
    Make a network graph with labels.
    """
    nodelist = kwargs.get('nodelist', None)
    node_sizes = kwargs.get('node_sizes', None)
    node_colors = kwargs.get('node_colors', None)
    node_tooltips = kwargs.get('node_tooltips', None)
    lw = kwargs.get('linewidths', len(nodelist) * [0.25])
    fs = kwargs.get('figsize', (12,  8))
    t = kwargs.get('title', '')
    
    # associate each list with a key
    node_arrs = {
        'size': node_sizes,
        'color': node_colors,
        'tooltip': node_tooltips
    }
    
    # associate each node with some data
    node_data = {
        nodelist[i]: {
            k: arr[i]
            for k, arr in node_arrs.items()
            if arr is not None
        }
        for i in range(len(nodelist))
    }
    
    # create graph from edge list
    G = nx.from_pandas_edgelist(edge_df, source, dest)
    # generate positions of nodes in graph
    pos = nx.spring_layout(G)
    nodes, x, y = zip(*[[k, v[0], v[1]] for k, v in pos.items()])
    
    # now that we have a different order of nodes, change the order
    node_arrs = {
        k: None if arr is None else [node_data[n][k] for n in nodes]
        for k, arr in node_arrs.items()
    }
    
    # prepare the plot
    fig, ax = plt.subplots(nrows=1, ncols=1, figsize=fs)
    # add the nodes
    scatter = ax.scatter(x, y, s=node_arrs['size'], c=node_arrs['color'])
    
    # add the edges
    line_segments = LineCollection(
        [
            [pos[src], pos[dst]]
            for src, dst in zip(edge_df[source], edge_df[dest])
        ],
        colors='black',
        linewidths=lw
    )
    ax.add_collection(line_segments)
    
    # add tooltips, if any
    if node_arrs['tooltip'] is not None:
        tooltip = mpld3.plugins.PointLabelTooltip(
            scatter,
            labels=node_arrs['tooltip']
        )
        mpld3.plugins.connect(fig, tooltip)
    else:
        mpld3.plugins.connect(fig)
    
    # some extra style to help with the graph
    ax.grid(color='white', linestyle='solid')
    plt.title(t)
    # make sure to follow up with mpld3.display() )
def trubetskoy_colors():
    """
    Return 20 distinct colors as detailed by Sasha Trubetskoy.
    
    https://sashat.me/tag/color/
    """
    return [
        "#e6194B", "#3cb44b", "#ffe119", "#4363d8", "#f58231",
        "#911eb4", "#9A6324", "#42d4f4", "#f032e6", "#bfef45",
        "#fabebe", "#469990", "#e6beff", "#fffac8", "#800000",
        "#aaffc3", "#808000", "#ffd8b1", "#000075", "#a9a9a9"
    ]
    

def get_color_gradient(color0, color1, steps):
    """
    Get hex color values in a gradient, from color0 to color1.
    """
    return [c.rgb for c in list(color0.range_to(color1, steps))]
ridf100 = ridf.sort_values(by='msc sum', axis=0, ascending=False).head(100)
ridf100
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
index entity id alias synonyms scientific name category molecules group msc sum
308 309 310 tea {tea} camellia sinensis plant {12297, 5281804, 77837, 522266, 4133, 6184, 53... vegetable 47728.0
161 161 162 apple {apple} malus fruit {8193, 8194, 229377, 12293, 12294, 1031, 64410... fruit 45932.0
182 182 183 guava {guava} psidium guajava fruit {31234, 644104, 429065, 4564493, 12813, 535246... fruit 45031.0
359 363 364 tomato {tomato} solanum vegetable fruit {1031, 644104, 1032, 5283335, 5283339, 527, 53... vegetable 44776.0
181 181 182 grape {grape} vitis fruit {5283329, 62465, 61953, 5364231, 644104, 42906... fruit 44663.0
189 189 190 mango {mango} mangifera fruit {8193, 8194, 5283335, 644104, 429065, 12810, 1... fruit 44377.0
281 282 283 cocoa {cocoa} theobroma seed {5283329, 1030, 30215, 644104, 429065, 1031, 1... seasoning 44141.0
363 372 373 potato {potato} solanum vegetable tuber {8193, 30215, 644104, 31246, 527, 5364752, 528... grain 43733.0
195 195 196 papaya {pawpaw, papaw} carica fruit {12294, 1031, 644104, 429065, 1032, 31246, 527... fruit 43684.0
233 233 234 strawberry {strawberry} fragaria berry {31234, 1031, 644104, 429065, 12810, 229387, 5... fruit 43640.0
287 288 289 soybean {soya bean } glycine legume {1031, 644104, 1032, 5283335, 5283339, 527, 52... protein 43609.0
245 245 246 mushroom {mushroom} agaricus bisporus fungus {8193, 31234, 20995, 1030, 1031, 644104, 1032,... vegetable 43253.0
173 173 174 black currant {black currant} ribes fruit {644104, 1032, 31244, 7695, 527, 8723, 31253, ... fruit 43226.0
193 193 194 orange {orange} citrus fruit {8194, 12294, 1031, 644104, 1032, 527, 5364752... fruit 43140.0
54 54 55 rice {rice} oryza sativa cereal {5283329, 8193, 1031, 644104, 5283335, 1032, 5... grain 43067.0
163 163 164 apricot {armenia, zardalu} prunus fruit {12293, 12294, 1031, 644104, 12810, 12813, 527... fruit 42988.0
331 332 333 ginger {ginger} zingiber spice {5356544, 220674, 8194, 1031, 644104, 527, 442... seasoning 42984.0
340 341 342 green beans {french beans, snap beans, string beans} phaseolus vulgaris vegetable {8193, 1031, 644104, 5283335, 5283339, 527, 87... vegetable 42886.0
205 205 206 pineapple {ananas} ananas fruit {8193, 1031, 644104, 1032, 429065, 85519, 527,... fruit 42877.0
197 197 198 passionfruit {passionfruit} passiflora fruit {31234, 12293, 1031, 644104, 5352973, 527, 872... fruit 42791.0
200 200 201 peach {nectarine} prunus fruit {5283335, 644104, 12810, 12813, 5352973, 61455... fruit 42376.0
282 283 284 beans {beans} fabaceae legume {8193, 1031, 644104, 5283335, 5283339, 527, 87... protein 42215.0
166 166 167 banana {banana} musa fruit {8193, 12294, 1031, 644104, 1032, 61455, 527, ... fruit 42207.0
357 361 362 capsicum {sweet pepper} capsicum annuum vegetable fruit {62465, 6660, 644104, 12297, 527, 61455, 8723,... vegetable 42129.0
206 206 207 plum {plum} prunus fruit {1031, 644104, 429065, 5281804, 5352461, 12813... fruit 41997.0
283 284 285 lima beans {lima bean, sieva bean, butter bean} phaseolus lunatus legume {8193, 1031, 644104, 5283335, 5283339, 527, 87... protein 41660.0
55 55 56 corn {corn} zea maize {11265, 62465, 644104, 12297, 31242, 527, 4114... vegetable 41641.0
180 180 181 fig {fig} ficus carica fruit {644104, 527, 4114, 8723, 31253, 31260, 31265,... fruit 41627.0
190 190 191 melon {melon} cucurbitaceae fruit {8193, 5283335, 644104, 85519, 527, 8723, 7375... fruit 41598.0
285 286 287 peanut {goober, groundnut} arachis nut {5283329, 8194, 8193, 644104, 1032, 5283339, 3... protein 41575.0
... ... ... ... ... ... ... ... ... ...
178 178 179 elderberry {elder} sambucus nigra fruit-berry {5634, 644104, 527, 8723, 31251, 31253, 31260,... fruit 39696.0
222 222 223 blueberry {cherry} vaccinium berry {31234, 644104, 12813, 5352461, 527, 8723, 312... fruit 39695.0
101 101 102 chamomile {english chamomile, camomile, garden chamomile... chamaemelum essential oil {644104, 527, 8723, 31253, 522266, 31260, 1254... seasoning 39682.0
209 209 210 quince {quince} cydonia fruit {61953, 1031, 644104, 527, 8723, 7193, 31260, ... fruit 39544.0
164 164 165 avocado {avocado pear, alligator pear} persea fruit {644104, 527, 8723, 1049, 31260, 7710, 15394, ... fruit 39528.0
1 1 2 bread {bread} poacceae bakery {1031, 1032, 644104, 527, 8723, 31260, 15394, ... grain 39386.0
326 327 328 cassia {chinese cassia, chinese cinnamon} cinnamomum spice {62465, 644104, 527, 8723, 31253, 5144, 537295... seasoning 39360.0
115 115 116 lovage {lovage} levisticum officinale essential oil {8194, 644104, 5352461, 527, 4114, 8723, 31253... seasoning 39335.0
344 345 346 lettuce {lettuce} lettuce vegetable {644104, 5352460, 527, 61455, 8723, 31260, 153... vegetable 39318.0
256 256 257 fennel {fennel} foeniculum vulgare herb {644104, 31244, 527, 4114, 8723, 31253, 537295... vegetable 39231.0
355 358 359 kohlrabi {german turnip, turnip cabbage} brassica oleracea cabbage {30215, 644104, 527, 77840, 8723, 31252, 1049,... vegetable 39030.0
295 296 297 walnut {walnut} juglans nut {644104, 527, 8723, 31260, 15394, 6184, 65064,... protein 39015.0
361 365 366 cucumber {cucumber} cucumis gourd {8194, 644104, 527, 8723, 42011, 31260, 536272... vegetable 38952.0
352 353 354 cauliflower {cauliflower} brassica oleracea cabbage {644104, 527, 8723, 31260, 15394, 6184, 65064,... vegetable 38890.0
384 393 394 pomegranate {pomegranate} punica fruit {644104, 527, 8723, 5372954, 31260, 15394, 528... fruit 38886.0
264 264 265 sage {common sage, culinary sage, garden sage} salvia herb {644104, 5315594, 527, 8723, 31253, 522266, 31... vegetable 38875.0
365 374 375 allspice {pimenta, myrtle pepper, allspice} pimenta spice {644104, 527, 8723, 31253, 522266, 31260, 8222... seasoning 38863.0
297 298 299 sesame {sesame} sesamum seed {5283329, 62465, 1030, 5283335, 1032, 644104, ... protein 38850.0
111 111 112 hyssop oil {hyssop oil} hyssopus officinalis essential oil {5356544, 644104, 527, 8723, 31253, 522266, 31... seasoning 38806.0
371 380 381 carom seed {ajwain, ajowan, ajowan caraway, bishops weed} ajwain spice {644104, 94217, 527, 4114, 8723, 31253, 31260,... seasoning 38797.0
349 350 351 broccoli {broccoli} brassica oleracea cabbage {644104, 527, 8723, 5372954, 31260, 15394, 528... vegetable 38792.0
413 422 426 sunflower {helianthus} helianthus flower {644104, 5315594, 527, 8723, 5372954, 31260, 8... vegetable 38769.0
343 344 345 leek {leek} allium ampeloprasum vegetable {1031, 644104, 31245, 527, 5320722, 8723, 1049... vegetable 38730.0
50 50 51 barley {barley} hordeum cereal {644104, 77837, 527, 8723, 31252, 7704, 1049, ... grain 38729.0
225 225 226 sour cherry {sour cherry, tart cherry, dwarf cherry} prunus berry {8193, 644104, 5281804, 8205, 527, 8723, 31253... fruit 38725.0
385 394 395 poppy seed {poppy seed} papaver spice {644104, 527, 44229138, 8723, 31252, 31260, 53... seasoning 38722.0
259 259 260 lemon balm {common balm, balm mint , balm} melissa officinalis herb {644104, 5315594, 527, 8723, 31253, 5144, 3126... vegetable 38701.0
279 280 281 almond {almond} prunus nut {644104, 527, 8723, 5283349, 31260, 15394, 528... protein 38665.0
354 355 356 mustard {mustard} brassica cabbage {644104, 527, 8723, 31260, 7710, 15394, 6184, ... vegetable 38660.0
386 395 396 spinach {palak} spinacia vegetable {2762759, 644104, 527, 5283345, 8723, 5283349,... vegetable 38597.0

100 rows × 9 columns

def food_color_map():
    return {
        'grain': "#ffe119", # yellow
        'vegetable': "#3cb44b", # green
        'fruit': "#f032e6", # purple
        'protein': "#e6194B", # red
        'seasoning': "#f58231", # orange
        'dairy': "#a9a9a9", # grey
        'fat': "#9A6324", # brown
        'sugar': "#800000", # maroon
        'beverage': "#4363d8", # blue
        'alcohol': "#42d4f4" # turquoise
    }
ridf100_edges = flatten([
    [
        [ridf100.index[i], ridf100.index[j]]
        for j in range(1 + i, len(ridf100.index))
        if msc_matrix[ridf100.index[i]][ridf100.index[j]] > 0
    ]
    for i in range(len(ridf100.index))
])

edge_ridf100 = pd.DataFrame(ridf100_edges, columns=['a', 'b'])
edge_ridf100['weight'] = [
    msc_matrix[a][b]
    for a, b in zip(edge_ridf100['a'], edge_ridf100['b'])
]
edge_ridf100 = edge_ridf100.sort_values(by='weight', axis=0, ascending=False).head(100)

max_edge_weight = max(edge_ridf100['weight'])
edge_ridf100['weight'] = [
    w / max_edge_weight
    for w in edge_ridf100['weight']
]

# map each food group to a color gradient
fcmap = {
    k: get_color_gradient(Color('white'), Color(v), int(max_sum))
    for k, v in food_color_map().items()
}
max_sum = max(ridf100['msc sum'])
sizes = [
    1000.0 * (msc_sum / max_sum)**10
    for msc_sum in ridf100['msc sum']
]

ncolors = [
    fcmap[g][int((mscs**1) / (max_sum**0)) - 1]
    for g, mscs in zip(ridf100['group'], ridf100['msc sum'])
]

widths = [
    2 * w**10
    for w in edge_ridf100['weight']
]
make_network(
    edge_ridf100, 'a', 'b',
    nodelist=list(ridf100.index),
    node_sizes=sizes,
    node_colors=ncolors,
    node_tooltips=list(ridf100['alias']),
    linewidths=widths,
    title='Figure ' + str(fignum) + ':\nNetwork Graph of Food Groups'
)
fignum += 1
mpld3.display()

# Note: the axes here are meaningless.
# see https://github.com/mpld3/mpld3/issues/197
# hover over the bubbles to read the tooltip
<style> </style>
<script> function mpld3_load_lib(url, callback){ var s = document.createElement('script'); s.src = url; s.async = true; s.onreadystatechange = s.onload = callback; s.onerror = function(){console.warn("failed to load library " + url);}; document.getElementsByTagName("head")[0].appendChild(s); }

if(typeof(mpld3) !== "undefined" && mpld3._mpld3IsLoaded){ // already loaded: just create the figure !function(mpld3){

   mpld3.draw_figure("fig_el26461405863863261361091867889", {"width": 864.0, "height": 576.0, "axes": [{"bbox": [0.125, 0.125, 0.775, 0.755], "xlim": [-0.7370097799897429, 1.0928535925199307], "ylim": [-0.6965853711323814, 0.8238572407522975], "xdomain": [-0.7370097799897429, 1.0928535925199307], "ydomain": [-0.6965853711323814, 0.8238572407522975], "xscale": "linear", "yscale": "linear", "axes": [{"position": "bottom", "nticks": 9, "tickvalues": null, "tickformat": null, "scale": "linear", "fontsize": 10.0, "grid": {"gridOn": true, "color": "#FFFFFF", "dasharray": "none", "alpha": 1.0}, "visible": true}, {"position": "left", "nticks": 10, "tickvalues": null, "tickformat": null, "scale": "linear", "fontsize": 10.0, "grid": {"gridOn": true, "color": "#FFFFFF", "dasharray": "none", "alpha": 1.0}, "visible": true}], "axesbg": "#FFFFFF", "axesbgalpha": null, "zoomable": true, "id": "el2646140586386328656", "lines": [], "paths": [], "markers": [], "texts": [{"text": "Figure 3:\nNetwork Graph of Food Groups", "position": [0.49999999999999994, 1.0137969094922736], "coordinates": "axes", "h_anchor": "middle", "v_baseline": "auto", "rotation": -0.0, "fontsize": 12.0, "color": "#000000", "alpha": 1, "zorder": 3, "id": "el2646140586429311688"}], "collections": [{"offsets": "data01", "xindex": 0, "yindex": 1, "paths": [[[[0.0, -0.5], [0.13260155, -0.5], [0.25978993539242673, -0.44731684579412084], [0.3535533905932738, -0.3535533905932738], [0.44731684579412084, -0.25978993539242673], [0.5, -0.13260155], [0.5, 0.0], [0.5, 0.13260155], [0.44731684579412084, 0.25978993539242673], [0.3535533905932738, 0.3535533905932738], [0.25978993539242673, 0.44731684579412084], [0.13260155, 0.5], [0.0, 0.5], [-0.13260155, 0.5], [-0.25978993539242673, 0.44731684579412084], [-0.3535533905932738, 0.3535533905932738], [-0.44731684579412084, 0.25978993539242673], [-0.5, 0.13260155], [-0.5, 0.0], [-0.5, -0.13260155], [-0.44731684579412084, -0.25978993539242673], [-0.3535533905932738, -0.3535533905932738], [-0.25978993539242673, -0.44731684579412084], [-0.13260155, -0.5], [0.0, -0.5]], ["M", "C", "C", "C", "C", "C", "C", "C", "C", "Z"]]], "pathtransforms": [[26.10421277216434, 0.0, 0.0, 26.10421277216434, 0.0, 0.0], [20.209591237440307, 0.0, 0.0, 20.209591237440307, 0.0, 0.0], [31.622776601683793, 0.0, 0.0, 31.622776601683793, 0.0, 0.0], [23.642411769722692, 0.0, 0.0, 23.642411769722692, 0.0, 0.0], [22.980543165233183, 0.0, 0.0, 22.980543165233183, 0.0, 0.0], [21.396594619365928, 0.0, 0.0, 21.396594619365928, 0.0, 0.0], [22.692026163208965, 0.0, 0.0, 22.692026163208965, 0.0, 0.0], [21.974728458146124, 0.0, 0.0, 21.974728458146124, 0.0, 0.0], [20.425851519477668, 0.0, 0.0, 20.425851519477668, 0.0, 0.0], [18.523008506202807, 0.0, 0.0, 18.523008506202807, 0.0, 0.0], [17.118582018076925, 0.0, 0.0, 17.118582018076925, 0.0, 0.0], [17.102367786077792, 0.0, 0.0, 17.102367786077792, 0.0, 0.0], [16.02249511949902, 0.0, 0.0, 16.02249511949902, 0.0, 0.0], [19.078073769257752, 0.0, 0.0, 19.078073769257752, 0.0, 0.0], [20.137912973657944, 0.0, 0.0, 20.137912973657944, 0.0, 0.0], [20.311678421014488, 0.0, 0.0, 20.311678421014488, 0.0, 0.0], [18.503580590172056, 0.0, 0.0, 18.503580590172056, 0.0, 0.0], [18.744334289440204, 0.0, 0.0, 18.744334289440204, 0.0, 0.0], [13.873160280345468, 0.0, 0.0, 13.873160280345468, 0.0, 0.0], [19.329249683492105, 0.0, 0.0, 19.329249683492105, 0.0, 0.0], [14.467464541910172, 0.0, 0.0, 14.467464541910172, 0.0, 0.0], [18.91720288379755, 0.0, 0.0, 18.91720288379755, 0.0, 0.0], [19.268995067020498, 0.0, 0.0, 19.268995067020498, 0.0, 0.0], [18.31875688165127, 0.0, 0.0, 18.31875688165127, 0.0, 0.0], [16.68111825638485, 0.0, 0.0, 16.68111825638485, 0.0, 0.0], [18.735615183493184, 0.0, 0.0, 18.735615183493184, 0.0, 0.0], [14.658085828872162, 0.0, 0.0, 14.658085828872162, 0.0, 0.0], [14.939596005065855, 0.0, 0.0, 14.939596005065855, 0.0, 0.0], [17.44751657393009, 0.0, 0.0, 17.44751657393009, 0.0, 0.0], [14.856140865067832, 0.0, 0.0, 14.856140865067832, 0.0, 0.0], [14.088701062046443, 0.0, 0.0, 14.088701062046443, 0.0, 0.0], [13.868019915206538, 0.0, 0.0, 13.868019915206538, 0.0, 0.0], [16.94492194881305, 0.0, 0.0, 16.94492194881305, 0.0, 0.0], [15.85970516244388, 0.0, 0.0, 15.85970516244388, 0.0, 0.0], [15.789258313454033, 0.0, 0.0, 15.789258313454033, 0.0, 0.0], [15.01612132624782, 0.0, 0.0, 15.01612132624782, 0.0, 0.0], [13.777457749144302, 0.0, 0.0, 13.777457749144302, 0.0, 0.0], [15.903623026499575, 0.0, 0.0, 15.903623026499575, 0.0, 0.0], [15.985991296688118, 0.0, 0.0, 15.985991296688118, 0.0, 0.0], [12.960757081557189, 0.0, 0.0, 12.960757081557189, 0.0, 0.0], [13.451664506760286, 0.0, 0.0, 13.451664506760286, 0.0, 0.0]], "alphas": [null], "edgecolors": ["#D43DED", "#AD4AE9", "#3CB34A", "#C442EB", "#45BB44", "#EE8747", "#BE44EB", "#B946EA", "#F6CE35", "#59BC4F", "#DE3ECF", "#9853E8", "#DD41DA", "#A54DE9", "#E034B3", "#AE4AE9", "#A24FE8", "#A34EE8", "#845DE6", "#55BC4D", "#885BE6", "#F4CC39", "#A74DE9", "#A050E8", "#9654E7", "#ED894E", "#EA8D5A", "#69BC58", "#9B52E8", "#6ABC59", "#6EBD5B", "#E98E5C", "#60BC53", "#DD42DB", "#9057E7", "#69BC58", "#6FBD5C", "#9156E7", "#64BC55", "#E98F60", "#E98E5E"], "facecolors": ["#D43DED", "#AD4AE9", "#3CB34A", "#C442EB", "#45BB44", "#EE8747", "#BE44EB", "#B946EA", "#F6CE35", "#59BC4F", "#DE3ECF", "#9853E8", "#DD41DA", "#A54DE9", "#E034B3", "#AE4AE9", "#A24FE8", "#A34EE8", "#845DE6", "#55BC4D", "#885BE6", "#F4CC39", "#A74DE9", "#A050E8", "#9654E7", "#ED894E", "#EA8D5A", "#69BC58", "#9B52E8", "#6ABC59", "#6EBD5B", "#E98E5C", "#60BC53", "#DD42DB", "#9057E7", "#69BC58", "#6FBD5C", "#9156E7", "#64BC55", "#E98F60", "#E98E5E"], "edgewidths": [1.0], "offsetcoordinates": "data", "pathcoordinates": "display", "zorder": 1, "id": "el2646140586386898112"}, {"offsets": "data02", "xindex": 0, "yindex": 1, "paths": [[[[-0.20674161324399046, -0.2669859436332848], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.18512562408046146, -0.1976099933634015]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.35740448777765826, -0.14601136815094318]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.22176862640093573, -0.15871798924856134]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.20674161324399046, -0.2669859436332848]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.4685096854785205, -0.0170029956766148]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.22176862640093573, -0.15871798924856134]], ["M", "L"]], [[[-0.4586810295193953, 0.31835164748083794], [-0.5216980879059512, 0.2663869650465916]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.22781353804919593, -0.607811024948767]], ["M", "L"]], [[[-0.4586810295193953, 0.31835164748083794], [-0.641869943415196, 0.4598140915313585]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [0.11743163466067379, -0.15025118735732268]], ["M", "L"]], [[[-0.5216980879059512, 0.2663869650465916], [-0.641869943415196, 0.4598140915313585]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.29002774609490045, -0.31929264446364547]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.0744996362949477, -0.4758971922204083]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[0.11743163466067379, -0.15025118735732268], [0.37477920714403584, -0.30072869614111375]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.18512562408046146, -0.1976099933634015]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.5360631504446899, -0.048520371491976626]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.29002774609490045, -0.31929264446364547]], ["M", "L"]], [[[0.11743163466067379, -0.15025118735732268], [0.3218750476198819, -0.38173845003504464]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.5821575689247289, -0.13002418456574022]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.3935639563824319, -0.26844521846650865]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.4685096854785205, -0.0170029956766148]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [0.04338374814022191, -0.22661995875096727]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.7017152350335157, 0.17785945645379225]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.22176862640093573, -0.15871798924856134]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[0.3218750476198819, -0.38173845003504464], [0.37477920714403584, -0.30072869614111375]], ["M", "L"]], [[[0.5943795713333159, 0.23500551419760118], [0.7017152350335157, 0.17785945645379225]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.35075254170834097, -0.014191804183264307]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.6215197047611543, 0.3525146439848986]], ["M", "L"]], [[[-0.09191931565130497, -0.23272668180196845], [-0.0744996362949477, -0.4758971922204083]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.35740448777765826, -0.14601136815094318]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.35740448777765826, -0.14601136815094318]], ["M", "L"]], [[[0.6716437423885963, 0.3310034569405475], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.29002774609490045, -0.31929264446364547]], ["M", "L"]], [[[-0.3224185395230065, -0.07897050764080916], [-0.4685096854785205, -0.0170029956766148]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.07820229979360835, 0.24281851238979577]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [0.3795520616204416, 0.14798125180809799]], ["M", "L"]], [[[0.6215197047611543, 0.3525146439848986], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[-0.3224185395230065, -0.07897050764080916], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[-0.3224185395230065, -0.07897050764080916], [-0.41181479105749147, 0.126554071136686]], ["M", "L"]], [[[0.6215197047611543, 0.3525146439848986], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[-0.18017537724134045, -0.10280390483858562], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.41181479105749147, 0.126554071136686]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.1829362934779138, 0.3023871930706074]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[0.6215197047611543, 0.3525146439848986], [0.7017152350335157, 0.17785945645379225]], ["M", "L"]], [[[0.8186094829822906, 0.5468428960890863], [0.6215197047611543, 0.3525146439848986]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.4586810295193953, 0.31835164748083794]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [0.11743163466067379, -0.15025118735732268]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[0.8186094829822906, 0.5468428960890863], [0.9966990673512915, 0.7389056848061434]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.3747513753960827, -0.5659744918054084]], ["M", "L"]], [[[-0.09191931565130497, -0.23272668180196845], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.29496018996307305, 0.3020539421797319]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.35075254170834097, -0.014191804183264307]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.22176862640093573, -0.15871798924856134]], ["M", "L"]], [[[-0.45018024098590714, -0.14800650445660027], [-0.5821575689247289, -0.13002418456574022]], ["M", "L"]], [[[0.7017152350335157, 0.17785945645379225], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[0.7231248014415612, 0.2618700001077195], [1.0, 0.33255499294212093]], ["M", "L"]], [[[-0.09191931565130497, -0.23272668180196845], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.5216980879059512, 0.2663869650465916]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[0.5943795713333159, 0.23500551419760118], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[-0.4685096854785205, -0.0170029956766148], [-0.5360631504446899, -0.048520371491976626]], ["M", "L"]], [[[0.11743163466067379, -0.15025118735732268], [0.3795520616204416, 0.14798125180809799]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.5943795713333159, 0.23500551419760118]], ["M", "L"]], [[[0.8186094829822906, 0.5468428960890863], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[-0.06804766075892431, -0.1201526167267234], [0.04338374814022191, -0.22661995875096727]], ["M", "L"]], [[[-0.4685096854785205, -0.0170029956766148], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.3935639563824319, -0.26844521846650865]], ["M", "L"]], [[[-0.18017537724134045, -0.10280390483858562], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[0.5943795713333159, 0.23500551419760118], [0.6215197047611543, 0.3525146439848986]], ["M", "L"]], [[[0.7017152350335157, 0.17785945645379225], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[0.5943795713333159, 0.23500551419760118], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[-0.18017537724134045, -0.10280390483858562], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[-0.45018024098590714, -0.14800650445660027], [-0.5360631504446899, -0.048520371491976626]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[0.7017152350335157, 0.17785945645379225], [0.9741665470601403, 0.10487795362870442]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.5360631504446899, -0.048520371491976626]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [0.11743163466067379, -0.15025118735732268]], ["M", "L"]]], "pathtransforms": [], "alphas": [null], "edgecolors": ["#000000"], "facecolors": [], "edgewidths": [2.0, 2.0, 1.7971360049655776, 1.7028201750162486, 1.7028201750162486, 1.4459903108084542, 1.3684762094092209, 1.3684762094092209, 1.2947220788110518, 1.0944203670967418, 0.8217429221603281, 0.8217429221603281, 0.7310392864543159, 0.7310392864543159, 0.6891575988391958, 0.6891575988391958, 0.6494479051516725, 0.6118094974693024, 0.5761457776126219, 0.5761457776126219, 0.5423641125439713, 0.5423641125439713, 0.5423641125439713, 0.5103756940312796, 0.48009540247558397, 0.48009540247558397, 0.48009540247558397, 0.48009540247558397, 0.4514416748028664, 0.4514416748028664, 0.4243363763225633, 0.39870467645689395, 0.39870467645689395, 0.39870467645689395, 0.39870467645689395, 0.39870467645689395, 0.37447492824689804, 0.37447492824689804, 0.37447492824689804, 0.37447492824689804, 0.37447492824689804, 0.37447492824689804, 0.3515785515427856, 0.3515785515427856, 0.3515785515427856, 0.32994991978792426, 0.32994991978792426, 0.32994991978792426, 0.32994991978792426, 0.30952625030746905, 0.30952625030746905, 0.30952625030746905, 0.30952625030746905, 0.30952625030746905, 0.30952625030746905, 0.29024749801429434, 0.29024749801429434, 0.29024749801429434, 0.29024749801429434, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.2548976380527078, 0.2548976380527078, 0.2548976380527078, 0.2548976380527078, 0.2548976380527078, 0.23871921764182866, 0.23871921764182866, 0.23871921764182866, 0.23871921764182866, 0.23871921764182866, 0.23871921764182866, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.20910484401873153, 0.20910484401873153, 0.20910484401873153, 0.20910484401873153, 0.20910484401873153, 0.20910484401873153, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768], "offsetcoordinates": "display", "pathcoordinates": "data", "zorder": 2, "id": "el2646140586386897496"}], "images": [], "sharex": [], "sharey": []}], "data": {"data01": [[-0.20674161324399046, -0.2669859436332848], [-0.09191931565130497, -0.23272668180196845], [-0.23166090279494167, -0.0030494341910093873], [-0.18512562408046146, -0.1976099933634015], [-0.35740448777765826, -0.14601136815094318], [-0.3224185395230065, -0.07897050764080916], [-0.22176862640093573, -0.15871798924856134], [-0.18017537724134045, -0.10280390483858562], [-0.4685096854785205, -0.0170029956766148], [-0.4586810295193953, 0.31835164748083794], [-0.5216980879059512, 0.2663869650465916], [-0.22781353804919593, -0.607811024948767], [-0.641869943415196, 0.4598140915313585], [0.11743163466067379, -0.15025118735732268], [-0.45018024098590714, -0.14800650445660027], [-0.29002774609490045, -0.31929264446364547], [-0.0744996362949477, -0.4758971922204083], [-0.06804766075892431, -0.1201526167267234], [0.37477920714403584, -0.30072869614111375], [-0.5360631504446899, -0.048520371491976626], [0.3218750476198819, -0.38173845003504464], [-0.5821575689247289, -0.13002418456574022], [-0.3935639563824319, -0.26844521846650865], [-0.1351356291721819, -0.286249109635652], [0.04338374814022191, -0.22661995875096727], [0.3795520616204416, 0.14798125180809799], [0.7017152350335157, 0.17785945645379225], [0.5943795713333159, 0.23500551419760118], [-0.35075254170834097, -0.014191804183264307], [0.6215197047611543, 0.3525146439848986], [0.6716437423885963, 0.3310034569405475], [0.7231248014415612, 0.2618700001077195], [-0.07820229979360835, 0.24281851238979577], [-0.41181479105749147, 0.126554071136686], [-0.1829362934779138, 0.3023871930706074], [0.8186094829822906, 0.5468428960890863], [0.9966990673512915, 0.7389056848061434], [-0.3747513753960827, -0.5659744918054084], [-0.29496018996307305, 0.3020539421797319], [1.0, 0.33255499294212093], [0.9741665470601403, 0.10487795362870442]], "data02": [[0.0, 0.0]]}, "id": "el2646140586386326136", "plugins": [{"type": "reset"}, {"type": "zoom", "button": true, "enabled": false}, {"type": "boxzoom", "button": true, "enabled": false}, {"type": "tooltip", "id": "el2646140586386898112", "labels": ["apple", "strawberry", "tea", "guava", "tomato", "cocoa", "grape", "mango", "potato", "green beans", "beans", "banana", "lima beans", "orange", "soybean", "papaya", "pineapple", "apricot", "mandarin orange", "mushroom", "lemon", "rice", "black currant", "passionfruit", "plum", "ginger", "pepper", "laurel", "peach", "rosemary", "basil", "oregano", "capsicum", "peanut", "raspberry", "spearmint", "peppermint", "melon", "corn", "marjoram", "nutmeg"], "hoffset": 0, "voffset": 10, "location": "mouse"}]});

}(mpld3); }else if(typeof define === "function" && define.amd){ // require.js is available: use it to load d3/mpld3 require.config({paths: {d3: "https://mpld3.github.io/js/d3.v3.min"}}); require(["d3"], function(d3){ window.d3 = d3; mpld3_load_lib("https://mpld3.github.io/js/mpld3.v0.3.1.dev1.js", function(){

     mpld3.draw_figure("fig_el26461405863863261361091867889", {"width": 864.0, "height": 576.0, "axes": [{"bbox": [0.125, 0.125, 0.775, 0.755], "xlim": [-0.7370097799897429, 1.0928535925199307], "ylim": [-0.6965853711323814, 0.8238572407522975], "xdomain": [-0.7370097799897429, 1.0928535925199307], "ydomain": [-0.6965853711323814, 0.8238572407522975], "xscale": "linear", "yscale": "linear", "axes": [{"position": "bottom", "nticks": 9, "tickvalues": null, "tickformat": null, "scale": "linear", "fontsize": 10.0, "grid": {"gridOn": true, "color": "#FFFFFF", "dasharray": "none", "alpha": 1.0}, "visible": true}, {"position": "left", "nticks": 10, "tickvalues": null, "tickformat": null, "scale": "linear", "fontsize": 10.0, "grid": {"gridOn": true, "color": "#FFFFFF", "dasharray": "none", "alpha": 1.0}, "visible": true}], "axesbg": "#FFFFFF", "axesbgalpha": null, "zoomable": true, "id": "el2646140586386328656", "lines": [], "paths": [], "markers": [], "texts": [{"text": "Figure 3:\nNetwork Graph of Food Groups", "position": [0.49999999999999994, 1.0137969094922736], "coordinates": "axes", "h_anchor": "middle", "v_baseline": "auto", "rotation": -0.0, "fontsize": 12.0, "color": "#000000", "alpha": 1, "zorder": 3, "id": "el2646140586429311688"}], "collections": [{"offsets": "data01", "xindex": 0, "yindex": 1, "paths": [[[[0.0, -0.5], [0.13260155, -0.5], [0.25978993539242673, -0.44731684579412084], [0.3535533905932738, -0.3535533905932738], [0.44731684579412084, -0.25978993539242673], [0.5, -0.13260155], [0.5, 0.0], [0.5, 0.13260155], [0.44731684579412084, 0.25978993539242673], [0.3535533905932738, 0.3535533905932738], [0.25978993539242673, 0.44731684579412084], [0.13260155, 0.5], [0.0, 0.5], [-0.13260155, 0.5], [-0.25978993539242673, 0.44731684579412084], [-0.3535533905932738, 0.3535533905932738], [-0.44731684579412084, 0.25978993539242673], [-0.5, 0.13260155], [-0.5, 0.0], [-0.5, -0.13260155], [-0.44731684579412084, -0.25978993539242673], [-0.3535533905932738, -0.3535533905932738], [-0.25978993539242673, -0.44731684579412084], [-0.13260155, -0.5], [0.0, -0.5]], ["M", "C", "C", "C", "C", "C", "C", "C", "C", "Z"]]], "pathtransforms": [[26.10421277216434, 0.0, 0.0, 26.10421277216434, 0.0, 0.0], [20.209591237440307, 0.0, 0.0, 20.209591237440307, 0.0, 0.0], [31.622776601683793, 0.0, 0.0, 31.622776601683793, 0.0, 0.0], [23.642411769722692, 0.0, 0.0, 23.642411769722692, 0.0, 0.0], [22.980543165233183, 0.0, 0.0, 22.980543165233183, 0.0, 0.0], [21.396594619365928, 0.0, 0.0, 21.396594619365928, 0.0, 0.0], [22.692026163208965, 0.0, 0.0, 22.692026163208965, 0.0, 0.0], [21.974728458146124, 0.0, 0.0, 21.974728458146124, 0.0, 0.0], [20.425851519477668, 0.0, 0.0, 20.425851519477668, 0.0, 0.0], [18.523008506202807, 0.0, 0.0, 18.523008506202807, 0.0, 0.0], [17.118582018076925, 0.0, 0.0, 17.118582018076925, 0.0, 0.0], [17.102367786077792, 0.0, 0.0, 17.102367786077792, 0.0, 0.0], [16.02249511949902, 0.0, 0.0, 16.02249511949902, 0.0, 0.0], [19.078073769257752, 0.0, 0.0, 19.078073769257752, 0.0, 0.0], [20.137912973657944, 0.0, 0.0, 20.137912973657944, 0.0, 0.0], [20.311678421014488, 0.0, 0.0, 20.311678421014488, 0.0, 0.0], [18.503580590172056, 0.0, 0.0, 18.503580590172056, 0.0, 0.0], [18.744334289440204, 0.0, 0.0, 18.744334289440204, 0.0, 0.0], [13.873160280345468, 0.0, 0.0, 13.873160280345468, 0.0, 0.0], [19.329249683492105, 0.0, 0.0, 19.329249683492105, 0.0, 0.0], [14.467464541910172, 0.0, 0.0, 14.467464541910172, 0.0, 0.0], [18.91720288379755, 0.0, 0.0, 18.91720288379755, 0.0, 0.0], [19.268995067020498, 0.0, 0.0, 19.268995067020498, 0.0, 0.0], [18.31875688165127, 0.0, 0.0, 18.31875688165127, 0.0, 0.0], [16.68111825638485, 0.0, 0.0, 16.68111825638485, 0.0, 0.0], [18.735615183493184, 0.0, 0.0, 18.735615183493184, 0.0, 0.0], [14.658085828872162, 0.0, 0.0, 14.658085828872162, 0.0, 0.0], [14.939596005065855, 0.0, 0.0, 14.939596005065855, 0.0, 0.0], [17.44751657393009, 0.0, 0.0, 17.44751657393009, 0.0, 0.0], [14.856140865067832, 0.0, 0.0, 14.856140865067832, 0.0, 0.0], [14.088701062046443, 0.0, 0.0, 14.088701062046443, 0.0, 0.0], [13.868019915206538, 0.0, 0.0, 13.868019915206538, 0.0, 0.0], [16.94492194881305, 0.0, 0.0, 16.94492194881305, 0.0, 0.0], [15.85970516244388, 0.0, 0.0, 15.85970516244388, 0.0, 0.0], [15.789258313454033, 0.0, 0.0, 15.789258313454033, 0.0, 0.0], [15.01612132624782, 0.0, 0.0, 15.01612132624782, 0.0, 0.0], [13.777457749144302, 0.0, 0.0, 13.777457749144302, 0.0, 0.0], [15.903623026499575, 0.0, 0.0, 15.903623026499575, 0.0, 0.0], [15.985991296688118, 0.0, 0.0, 15.985991296688118, 0.0, 0.0], [12.960757081557189, 0.0, 0.0, 12.960757081557189, 0.0, 0.0], [13.451664506760286, 0.0, 0.0, 13.451664506760286, 0.0, 0.0]], "alphas": [null], "edgecolors": ["#D43DED", "#AD4AE9", "#3CB34A", "#C442EB", "#45BB44", "#EE8747", "#BE44EB", "#B946EA", "#F6CE35", "#59BC4F", "#DE3ECF", "#9853E8", "#DD41DA", "#A54DE9", "#E034B3", "#AE4AE9", "#A24FE8", "#A34EE8", "#845DE6", "#55BC4D", "#885BE6", "#F4CC39", "#A74DE9", "#A050E8", "#9654E7", "#ED894E", "#EA8D5A", "#69BC58", "#9B52E8", "#6ABC59", "#6EBD5B", "#E98E5C", "#60BC53", "#DD42DB", "#9057E7", "#69BC58", "#6FBD5C", "#9156E7", "#64BC55", "#E98F60", "#E98E5E"], "facecolors": ["#D43DED", "#AD4AE9", "#3CB34A", "#C442EB", "#45BB44", "#EE8747", "#BE44EB", "#B946EA", "#F6CE35", "#59BC4F", "#DE3ECF", "#9853E8", "#DD41DA", "#A54DE9", "#E034B3", "#AE4AE9", "#A24FE8", "#A34EE8", "#845DE6", "#55BC4D", "#885BE6", "#F4CC39", "#A74DE9", "#A050E8", "#9654E7", "#ED894E", "#EA8D5A", "#69BC58", "#9B52E8", "#6ABC59", "#6EBD5B", "#E98E5C", "#60BC53", "#DD42DB", "#9057E7", "#69BC58", "#6FBD5C", "#9156E7", "#64BC55", "#E98F60", "#E98E5E"], "edgewidths": [1.0], "offsetcoordinates": "data", "pathcoordinates": "display", "zorder": 1, "id": "el2646140586386898112"}, {"offsets": "data02", "xindex": 0, "yindex": 1, "paths": [[[[-0.20674161324399046, -0.2669859436332848], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.18512562408046146, -0.1976099933634015]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.35740448777765826, -0.14601136815094318]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.22176862640093573, -0.15871798924856134]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.20674161324399046, -0.2669859436332848]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.4685096854785205, -0.0170029956766148]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.22176862640093573, -0.15871798924856134]], ["M", "L"]], [[[-0.4586810295193953, 0.31835164748083794], [-0.5216980879059512, 0.2663869650465916]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.22781353804919593, -0.607811024948767]], ["M", "L"]], [[[-0.4586810295193953, 0.31835164748083794], [-0.641869943415196, 0.4598140915313585]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [0.11743163466067379, -0.15025118735732268]], ["M", "L"]], [[[-0.5216980879059512, 0.2663869650465916], [-0.641869943415196, 0.4598140915313585]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.29002774609490045, -0.31929264446364547]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.0744996362949477, -0.4758971922204083]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[0.11743163466067379, -0.15025118735732268], [0.37477920714403584, -0.30072869614111375]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.18512562408046146, -0.1976099933634015]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.5360631504446899, -0.048520371491976626]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.29002774609490045, -0.31929264446364547]], ["M", "L"]], [[[0.11743163466067379, -0.15025118735732268], [0.3218750476198819, -0.38173845003504464]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.5821575689247289, -0.13002418456574022]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.3935639563824319, -0.26844521846650865]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.4685096854785205, -0.0170029956766148]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [0.04338374814022191, -0.22661995875096727]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.7017152350335157, 0.17785945645379225]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.22176862640093573, -0.15871798924856134]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[0.3218750476198819, -0.38173845003504464], [0.37477920714403584, -0.30072869614111375]], ["M", "L"]], [[[0.5943795713333159, 0.23500551419760118], [0.7017152350335157, 0.17785945645379225]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.35075254170834097, -0.014191804183264307]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.6215197047611543, 0.3525146439848986]], ["M", "L"]], [[[-0.09191931565130497, -0.23272668180196845], [-0.0744996362949477, -0.4758971922204083]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.35740448777765826, -0.14601136815094318]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.35740448777765826, -0.14601136815094318]], ["M", "L"]], [[[0.6716437423885963, 0.3310034569405475], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.29002774609490045, -0.31929264446364547]], ["M", "L"]], [[[-0.3224185395230065, -0.07897050764080916], [-0.4685096854785205, -0.0170029956766148]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.07820229979360835, 0.24281851238979577]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [0.3795520616204416, 0.14798125180809799]], ["M", "L"]], [[[0.6215197047611543, 0.3525146439848986], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[-0.3224185395230065, -0.07897050764080916], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[-0.3224185395230065, -0.07897050764080916], [-0.41181479105749147, 0.126554071136686]], ["M", "L"]], [[[0.6215197047611543, 0.3525146439848986], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[-0.18017537724134045, -0.10280390483858562], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.41181479105749147, 0.126554071136686]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.1829362934779138, 0.3023871930706074]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[0.6215197047611543, 0.3525146439848986], [0.7017152350335157, 0.17785945645379225]], ["M", "L"]], [[[0.8186094829822906, 0.5468428960890863], [0.6215197047611543, 0.3525146439848986]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.4586810295193953, 0.31835164748083794]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [0.11743163466067379, -0.15025118735732268]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[0.8186094829822906, 0.5468428960890863], [0.9966990673512915, 0.7389056848061434]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.3747513753960827, -0.5659744918054084]], ["M", "L"]], [[[-0.09191931565130497, -0.23272668180196845], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.29496018996307305, 0.3020539421797319]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.35075254170834097, -0.014191804183264307]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.22176862640093573, -0.15871798924856134]], ["M", "L"]], [[[-0.45018024098590714, -0.14800650445660027], [-0.5821575689247289, -0.13002418456574022]], ["M", "L"]], [[[0.7017152350335157, 0.17785945645379225], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[0.7231248014415612, 0.2618700001077195], [1.0, 0.33255499294212093]], ["M", "L"]], [[[-0.09191931565130497, -0.23272668180196845], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.5216980879059512, 0.2663869650465916]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[0.5943795713333159, 0.23500551419760118], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[-0.4685096854785205, -0.0170029956766148], [-0.5360631504446899, -0.048520371491976626]], ["M", "L"]], [[[0.11743163466067379, -0.15025118735732268], [0.3795520616204416, 0.14798125180809799]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.5943795713333159, 0.23500551419760118]], ["M", "L"]], [[[0.8186094829822906, 0.5468428960890863], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[-0.06804766075892431, -0.1201526167267234], [0.04338374814022191, -0.22661995875096727]], ["M", "L"]], [[[-0.4685096854785205, -0.0170029956766148], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.3935639563824319, -0.26844521846650865]], ["M", "L"]], [[[-0.18017537724134045, -0.10280390483858562], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[0.5943795713333159, 0.23500551419760118], [0.6215197047611543, 0.3525146439848986]], ["M", "L"]], [[[0.7017152350335157, 0.17785945645379225], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[0.5943795713333159, 0.23500551419760118], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[-0.18017537724134045, -0.10280390483858562], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[-0.45018024098590714, -0.14800650445660027], [-0.5360631504446899, -0.048520371491976626]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[0.7017152350335157, 0.17785945645379225], [0.9741665470601403, 0.10487795362870442]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.5360631504446899, -0.048520371491976626]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [0.11743163466067379, -0.15025118735732268]], ["M", "L"]]], "pathtransforms": [], "alphas": [null], "edgecolors": ["#000000"], "facecolors": [], "edgewidths": [2.0, 2.0, 1.7971360049655776, 1.7028201750162486, 1.7028201750162486, 1.4459903108084542, 1.3684762094092209, 1.3684762094092209, 1.2947220788110518, 1.0944203670967418, 0.8217429221603281, 0.8217429221603281, 0.7310392864543159, 0.7310392864543159, 0.6891575988391958, 0.6891575988391958, 0.6494479051516725, 0.6118094974693024, 0.5761457776126219, 0.5761457776126219, 0.5423641125439713, 0.5423641125439713, 0.5423641125439713, 0.5103756940312796, 0.48009540247558397, 0.48009540247558397, 0.48009540247558397, 0.48009540247558397, 0.4514416748028664, 0.4514416748028664, 0.4243363763225633, 0.39870467645689395, 0.39870467645689395, 0.39870467645689395, 0.39870467645689395, 0.39870467645689395, 0.37447492824689804, 0.37447492824689804, 0.37447492824689804, 0.37447492824689804, 0.37447492824689804, 0.37447492824689804, 0.3515785515427856, 0.3515785515427856, 0.3515785515427856, 0.32994991978792426, 0.32994991978792426, 0.32994991978792426, 0.32994991978792426, 0.30952625030746905, 0.30952625030746905, 0.30952625030746905, 0.30952625030746905, 0.30952625030746905, 0.30952625030746905, 0.29024749801429434, 0.29024749801429434, 0.29024749801429434, 0.29024749801429434, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.2548976380527078, 0.2548976380527078, 0.2548976380527078, 0.2548976380527078, 0.2548976380527078, 0.23871921764182866, 0.23871921764182866, 0.23871921764182866, 0.23871921764182866, 0.23871921764182866, 0.23871921764182866, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.20910484401873153, 0.20910484401873153, 0.20910484401873153, 0.20910484401873153, 0.20910484401873153, 0.20910484401873153, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768], "offsetcoordinates": "display", "pathcoordinates": "data", "zorder": 2, "id": "el2646140586386897496"}], "images": [], "sharex": [], "sharey": []}], "data": {"data01": [[-0.20674161324399046, -0.2669859436332848], [-0.09191931565130497, -0.23272668180196845], [-0.23166090279494167, -0.0030494341910093873], [-0.18512562408046146, -0.1976099933634015], [-0.35740448777765826, -0.14601136815094318], [-0.3224185395230065, -0.07897050764080916], [-0.22176862640093573, -0.15871798924856134], [-0.18017537724134045, -0.10280390483858562], [-0.4685096854785205, -0.0170029956766148], [-0.4586810295193953, 0.31835164748083794], [-0.5216980879059512, 0.2663869650465916], [-0.22781353804919593, -0.607811024948767], [-0.641869943415196, 0.4598140915313585], [0.11743163466067379, -0.15025118735732268], [-0.45018024098590714, -0.14800650445660027], [-0.29002774609490045, -0.31929264446364547], [-0.0744996362949477, -0.4758971922204083], [-0.06804766075892431, -0.1201526167267234], [0.37477920714403584, -0.30072869614111375], [-0.5360631504446899, -0.048520371491976626], [0.3218750476198819, -0.38173845003504464], [-0.5821575689247289, -0.13002418456574022], [-0.3935639563824319, -0.26844521846650865], [-0.1351356291721819, -0.286249109635652], [0.04338374814022191, -0.22661995875096727], [0.3795520616204416, 0.14798125180809799], [0.7017152350335157, 0.17785945645379225], [0.5943795713333159, 0.23500551419760118], [-0.35075254170834097, -0.014191804183264307], [0.6215197047611543, 0.3525146439848986], [0.6716437423885963, 0.3310034569405475], [0.7231248014415612, 0.2618700001077195], [-0.07820229979360835, 0.24281851238979577], [-0.41181479105749147, 0.126554071136686], [-0.1829362934779138, 0.3023871930706074], [0.8186094829822906, 0.5468428960890863], [0.9966990673512915, 0.7389056848061434], [-0.3747513753960827, -0.5659744918054084], [-0.29496018996307305, 0.3020539421797319], [1.0, 0.33255499294212093], [0.9741665470601403, 0.10487795362870442]], "data02": [[0.0, 0.0]]}, "id": "el2646140586386326136", "plugins": [{"type": "reset"}, {"type": "zoom", "button": true, "enabled": false}, {"type": "boxzoom", "button": true, "enabled": false}, {"type": "tooltip", "id": "el2646140586386898112", "labels": ["apple", "strawberry", "tea", "guava", "tomato", "cocoa", "grape", "mango", "potato", "green beans", "beans", "banana", "lima beans", "orange", "soybean", "papaya", "pineapple", "apricot", "mandarin orange", "mushroom", "lemon", "rice", "black currant", "passionfruit", "plum", "ginger", "pepper", "laurel", "peach", "rosemary", "basil", "oregano", "capsicum", "peanut", "raspberry", "spearmint", "peppermint", "melon", "corn", "marjoram", "nutmeg"], "hoffset": 0, "voffset": 10, "location": "mouse"}]});
  });
});

}else{ // require.js not available: dynamically load d3 & mpld3 mpld3_load_lib("https://mpld3.github.io/js/d3.v3.min.js", function(){ mpld3_load_lib("https://mpld3.github.io/js/mpld3.v0.3.1.dev1.js", function(){

             mpld3.draw_figure("fig_el26461405863863261361091867889", {"width": 864.0, "height": 576.0, "axes": [{"bbox": [0.125, 0.125, 0.775, 0.755], "xlim": [-0.7370097799897429, 1.0928535925199307], "ylim": [-0.6965853711323814, 0.8238572407522975], "xdomain": [-0.7370097799897429, 1.0928535925199307], "ydomain": [-0.6965853711323814, 0.8238572407522975], "xscale": "linear", "yscale": "linear", "axes": [{"position": "bottom", "nticks": 9, "tickvalues": null, "tickformat": null, "scale": "linear", "fontsize": 10.0, "grid": {"gridOn": true, "color": "#FFFFFF", "dasharray": "none", "alpha": 1.0}, "visible": true}, {"position": "left", "nticks": 10, "tickvalues": null, "tickformat": null, "scale": "linear", "fontsize": 10.0, "grid": {"gridOn": true, "color": "#FFFFFF", "dasharray": "none", "alpha": 1.0}, "visible": true}], "axesbg": "#FFFFFF", "axesbgalpha": null, "zoomable": true, "id": "el2646140586386328656", "lines": [], "paths": [], "markers": [], "texts": [{"text": "Figure 3:\nNetwork Graph of Food Groups", "position": [0.49999999999999994, 1.0137969094922736], "coordinates": "axes", "h_anchor": "middle", "v_baseline": "auto", "rotation": -0.0, "fontsize": 12.0, "color": "#000000", "alpha": 1, "zorder": 3, "id": "el2646140586429311688"}], "collections": [{"offsets": "data01", "xindex": 0, "yindex": 1, "paths": [[[[0.0, -0.5], [0.13260155, -0.5], [0.25978993539242673, -0.44731684579412084], [0.3535533905932738, -0.3535533905932738], [0.44731684579412084, -0.25978993539242673], [0.5, -0.13260155], [0.5, 0.0], [0.5, 0.13260155], [0.44731684579412084, 0.25978993539242673], [0.3535533905932738, 0.3535533905932738], [0.25978993539242673, 0.44731684579412084], [0.13260155, 0.5], [0.0, 0.5], [-0.13260155, 0.5], [-0.25978993539242673, 0.44731684579412084], [-0.3535533905932738, 0.3535533905932738], [-0.44731684579412084, 0.25978993539242673], [-0.5, 0.13260155], [-0.5, 0.0], [-0.5, -0.13260155], [-0.44731684579412084, -0.25978993539242673], [-0.3535533905932738, -0.3535533905932738], [-0.25978993539242673, -0.44731684579412084], [-0.13260155, -0.5], [0.0, -0.5]], ["M", "C", "C", "C", "C", "C", "C", "C", "C", "Z"]]], "pathtransforms": [[26.10421277216434, 0.0, 0.0, 26.10421277216434, 0.0, 0.0], [20.209591237440307, 0.0, 0.0, 20.209591237440307, 0.0, 0.0], [31.622776601683793, 0.0, 0.0, 31.622776601683793, 0.0, 0.0], [23.642411769722692, 0.0, 0.0, 23.642411769722692, 0.0, 0.0], [22.980543165233183, 0.0, 0.0, 22.980543165233183, 0.0, 0.0], [21.396594619365928, 0.0, 0.0, 21.396594619365928, 0.0, 0.0], [22.692026163208965, 0.0, 0.0, 22.692026163208965, 0.0, 0.0], [21.974728458146124, 0.0, 0.0, 21.974728458146124, 0.0, 0.0], [20.425851519477668, 0.0, 0.0, 20.425851519477668, 0.0, 0.0], [18.523008506202807, 0.0, 0.0, 18.523008506202807, 0.0, 0.0], [17.118582018076925, 0.0, 0.0, 17.118582018076925, 0.0, 0.0], [17.102367786077792, 0.0, 0.0, 17.102367786077792, 0.0, 0.0], [16.02249511949902, 0.0, 0.0, 16.02249511949902, 0.0, 0.0], [19.078073769257752, 0.0, 0.0, 19.078073769257752, 0.0, 0.0], [20.137912973657944, 0.0, 0.0, 20.137912973657944, 0.0, 0.0], [20.311678421014488, 0.0, 0.0, 20.311678421014488, 0.0, 0.0], [18.503580590172056, 0.0, 0.0, 18.503580590172056, 0.0, 0.0], [18.744334289440204, 0.0, 0.0, 18.744334289440204, 0.0, 0.0], [13.873160280345468, 0.0, 0.0, 13.873160280345468, 0.0, 0.0], [19.329249683492105, 0.0, 0.0, 19.329249683492105, 0.0, 0.0], [14.467464541910172, 0.0, 0.0, 14.467464541910172, 0.0, 0.0], [18.91720288379755, 0.0, 0.0, 18.91720288379755, 0.0, 0.0], [19.268995067020498, 0.0, 0.0, 19.268995067020498, 0.0, 0.0], [18.31875688165127, 0.0, 0.0, 18.31875688165127, 0.0, 0.0], [16.68111825638485, 0.0, 0.0, 16.68111825638485, 0.0, 0.0], [18.735615183493184, 0.0, 0.0, 18.735615183493184, 0.0, 0.0], [14.658085828872162, 0.0, 0.0, 14.658085828872162, 0.0, 0.0], [14.939596005065855, 0.0, 0.0, 14.939596005065855, 0.0, 0.0], [17.44751657393009, 0.0, 0.0, 17.44751657393009, 0.0, 0.0], [14.856140865067832, 0.0, 0.0, 14.856140865067832, 0.0, 0.0], [14.088701062046443, 0.0, 0.0, 14.088701062046443, 0.0, 0.0], [13.868019915206538, 0.0, 0.0, 13.868019915206538, 0.0, 0.0], [16.94492194881305, 0.0, 0.0, 16.94492194881305, 0.0, 0.0], [15.85970516244388, 0.0, 0.0, 15.85970516244388, 0.0, 0.0], [15.789258313454033, 0.0, 0.0, 15.789258313454033, 0.0, 0.0], [15.01612132624782, 0.0, 0.0, 15.01612132624782, 0.0, 0.0], [13.777457749144302, 0.0, 0.0, 13.777457749144302, 0.0, 0.0], [15.903623026499575, 0.0, 0.0, 15.903623026499575, 0.0, 0.0], [15.985991296688118, 0.0, 0.0, 15.985991296688118, 0.0, 0.0], [12.960757081557189, 0.0, 0.0, 12.960757081557189, 0.0, 0.0], [13.451664506760286, 0.0, 0.0, 13.451664506760286, 0.0, 0.0]], "alphas": [null], "edgecolors": ["#D43DED", "#AD4AE9", "#3CB34A", "#C442EB", "#45BB44", "#EE8747", "#BE44EB", "#B946EA", "#F6CE35", "#59BC4F", "#DE3ECF", "#9853E8", "#DD41DA", "#A54DE9", "#E034B3", "#AE4AE9", "#A24FE8", "#A34EE8", "#845DE6", "#55BC4D", "#885BE6", "#F4CC39", "#A74DE9", "#A050E8", "#9654E7", "#ED894E", "#EA8D5A", "#69BC58", "#9B52E8", "#6ABC59", "#6EBD5B", "#E98E5C", "#60BC53", "#DD42DB", "#9057E7", "#69BC58", "#6FBD5C", "#9156E7", "#64BC55", "#E98F60", "#E98E5E"], "facecolors": ["#D43DED", "#AD4AE9", "#3CB34A", "#C442EB", "#45BB44", "#EE8747", "#BE44EB", "#B946EA", "#F6CE35", "#59BC4F", "#DE3ECF", "#9853E8", "#DD41DA", "#A54DE9", "#E034B3", "#AE4AE9", "#A24FE8", "#A34EE8", "#845DE6", "#55BC4D", "#885BE6", "#F4CC39", "#A74DE9", "#A050E8", "#9654E7", "#ED894E", "#EA8D5A", "#69BC58", "#9B52E8", "#6ABC59", "#6EBD5B", "#E98E5C", "#60BC53", "#DD42DB", "#9057E7", "#69BC58", "#6FBD5C", "#9156E7", "#64BC55", "#E98F60", "#E98E5E"], "edgewidths": [1.0], "offsetcoordinates": "data", "pathcoordinates": "display", "zorder": 1, "id": "el2646140586386898112"}, {"offsets": "data02", "xindex": 0, "yindex": 1, "paths": [[[[-0.20674161324399046, -0.2669859436332848], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.18512562408046146, -0.1976099933634015]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.35740448777765826, -0.14601136815094318]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.22176862640093573, -0.15871798924856134]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.20674161324399046, -0.2669859436332848]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.4685096854785205, -0.0170029956766148]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.22176862640093573, -0.15871798924856134]], ["M", "L"]], [[[-0.4586810295193953, 0.31835164748083794], [-0.5216980879059512, 0.2663869650465916]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.22781353804919593, -0.607811024948767]], ["M", "L"]], [[[-0.4586810295193953, 0.31835164748083794], [-0.641869943415196, 0.4598140915313585]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [0.11743163466067379, -0.15025118735732268]], ["M", "L"]], [[[-0.5216980879059512, 0.2663869650465916], [-0.641869943415196, 0.4598140915313585]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.29002774609490045, -0.31929264446364547]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.0744996362949477, -0.4758971922204083]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[0.11743163466067379, -0.15025118735732268], [0.37477920714403584, -0.30072869614111375]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.18512562408046146, -0.1976099933634015]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.5360631504446899, -0.048520371491976626]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.29002774609490045, -0.31929264446364547]], ["M", "L"]], [[[0.11743163466067379, -0.15025118735732268], [0.3218750476198819, -0.38173845003504464]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.5821575689247289, -0.13002418456574022]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.3935639563824319, -0.26844521846650865]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.4685096854785205, -0.0170029956766148]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [0.04338374814022191, -0.22661995875096727]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.7017152350335157, 0.17785945645379225]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.22176862640093573, -0.15871798924856134]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[0.3218750476198819, -0.38173845003504464], [0.37477920714403584, -0.30072869614111375]], ["M", "L"]], [[[0.5943795713333159, 0.23500551419760118], [0.7017152350335157, 0.17785945645379225]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.35075254170834097, -0.014191804183264307]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.6215197047611543, 0.3525146439848986]], ["M", "L"]], [[[-0.09191931565130497, -0.23272668180196845], [-0.0744996362949477, -0.4758971922204083]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.35740448777765826, -0.14601136815094318]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.35740448777765826, -0.14601136815094318]], ["M", "L"]], [[[0.6716437423885963, 0.3310034569405475], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.29002774609490045, -0.31929264446364547]], ["M", "L"]], [[[-0.3224185395230065, -0.07897050764080916], [-0.4685096854785205, -0.0170029956766148]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.07820229979360835, 0.24281851238979577]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [0.3795520616204416, 0.14798125180809799]], ["M", "L"]], [[[0.6215197047611543, 0.3525146439848986], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[-0.3224185395230065, -0.07897050764080916], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[-0.3224185395230065, -0.07897050764080916], [-0.41181479105749147, 0.126554071136686]], ["M", "L"]], [[[0.6215197047611543, 0.3525146439848986], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[-0.18017537724134045, -0.10280390483858562], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.18017537724134045, -0.10280390483858562]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.41181479105749147, 0.126554071136686]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.1829362934779138, 0.3023871930706074]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[0.6215197047611543, 0.3525146439848986], [0.7017152350335157, 0.17785945645379225]], ["M", "L"]], [[[0.8186094829822906, 0.5468428960890863], [0.6215197047611543, 0.3525146439848986]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.4586810295193953, 0.31835164748083794]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [0.11743163466067379, -0.15025118735732268]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[-0.22176862640093573, -0.15871798924856134], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[0.8186094829822906, 0.5468428960890863], [0.9966990673512915, 0.7389056848061434]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.3747513753960827, -0.5659744918054084]], ["M", "L"]], [[[-0.09191931565130497, -0.23272668180196845], [-0.1351356291721819, -0.286249109635652]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.29496018996307305, 0.3020539421797319]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.35075254170834097, -0.014191804183264307]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.09191931565130497, -0.23272668180196845]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.22176862640093573, -0.15871798924856134]], ["M", "L"]], [[[-0.45018024098590714, -0.14800650445660027], [-0.5821575689247289, -0.13002418456574022]], ["M", "L"]], [[[0.7017152350335157, 0.17785945645379225], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[0.7231248014415612, 0.2618700001077195], [1.0, 0.33255499294212093]], ["M", "L"]], [[[-0.09191931565130497, -0.23272668180196845], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[-0.23166090279494167, -0.0030494341910093873], [-0.5216980879059512, 0.2663869650465916]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[0.5943795713333159, 0.23500551419760118], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[-0.4685096854785205, -0.0170029956766148], [-0.5360631504446899, -0.048520371491976626]], ["M", "L"]], [[[0.11743163466067379, -0.15025118735732268], [0.3795520616204416, 0.14798125180809799]], ["M", "L"]], [[[0.3795520616204416, 0.14798125180809799], [0.5943795713333159, 0.23500551419760118]], ["M", "L"]], [[[0.8186094829822906, 0.5468428960890863], [0.6716437423885963, 0.3310034569405475]], ["M", "L"]], [[[-0.06804766075892431, -0.1201526167267234], [0.04338374814022191, -0.22661995875096727]], ["M", "L"]], [[[-0.4685096854785205, -0.0170029956766148], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [-0.3935639563824319, -0.26844521846650865]], ["M", "L"]], [[[-0.18017537724134045, -0.10280390483858562], [-0.06804766075892431, -0.1201526167267234]], ["M", "L"]], [[[0.5943795713333159, 0.23500551419760118], [0.6215197047611543, 0.3525146439848986]], ["M", "L"]], [[[0.7017152350335157, 0.17785945645379225], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[0.5943795713333159, 0.23500551419760118], [0.7231248014415612, 0.2618700001077195]], ["M", "L"]], [[[-0.18017537724134045, -0.10280390483858562], [-0.3224185395230065, -0.07897050764080916]], ["M", "L"]], [[[-0.45018024098590714, -0.14800650445660027], [-0.5360631504446899, -0.048520371491976626]], ["M", "L"]], [[[-0.20674161324399046, -0.2669859436332848], [-0.45018024098590714, -0.14800650445660027]], ["M", "L"]], [[[0.7017152350335157, 0.17785945645379225], [0.9741665470601403, 0.10487795362870442]], ["M", "L"]], [[[-0.35740448777765826, -0.14601136815094318], [-0.5360631504446899, -0.048520371491976626]], ["M", "L"]], [[[-0.18512562408046146, -0.1976099933634015], [0.11743163466067379, -0.15025118735732268]], ["M", "L"]]], "pathtransforms": [], "alphas": [null], "edgecolors": ["#000000"], "facecolors": [], "edgewidths": [2.0, 2.0, 1.7971360049655776, 1.7028201750162486, 1.7028201750162486, 1.4459903108084542, 1.3684762094092209, 1.3684762094092209, 1.2947220788110518, 1.0944203670967418, 0.8217429221603281, 0.8217429221603281, 0.7310392864543159, 0.7310392864543159, 0.6891575988391958, 0.6891575988391958, 0.6494479051516725, 0.6118094974693024, 0.5761457776126219, 0.5761457776126219, 0.5423641125439713, 0.5423641125439713, 0.5423641125439713, 0.5103756940312796, 0.48009540247558397, 0.48009540247558397, 0.48009540247558397, 0.48009540247558397, 0.4514416748028664, 0.4514416748028664, 0.4243363763225633, 0.39870467645689395, 0.39870467645689395, 0.39870467645689395, 0.39870467645689395, 0.39870467645689395, 0.37447492824689804, 0.37447492824689804, 0.37447492824689804, 0.37447492824689804, 0.37447492824689804, 0.37447492824689804, 0.3515785515427856, 0.3515785515427856, 0.3515785515427856, 0.32994991978792426, 0.32994991978792426, 0.32994991978792426, 0.32994991978792426, 0.30952625030746905, 0.30952625030746905, 0.30952625030746905, 0.30952625030746905, 0.30952625030746905, 0.30952625030746905, 0.29024749801429434, 0.29024749801429434, 0.29024749801429434, 0.29024749801429434, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.27205625244654014, 0.2548976380527078, 0.2548976380527078, 0.2548976380527078, 0.2548976380527078, 0.2548976380527078, 0.23871921764182866, 0.23871921764182866, 0.23871921764182866, 0.23871921764182866, 0.23871921764182866, 0.23871921764182866, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.22347089891782493, 0.20910484401873153, 0.20910484401873153, 0.20910484401873153, 0.20910484401873153, 0.20910484401873153, 0.20910484401873153, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768, 0.19557538198299768], "offsetcoordinates": "display", "pathcoordinates": "data", "zorder": 2, "id": "el2646140586386897496"}], "images": [], "sharex": [], "sharey": []}], "data": {"data01": [[-0.20674161324399046, -0.2669859436332848], [-0.09191931565130497, -0.23272668180196845], [-0.23166090279494167, -0.0030494341910093873], [-0.18512562408046146, -0.1976099933634015], [-0.35740448777765826, -0.14601136815094318], [-0.3224185395230065, -0.07897050764080916], [-0.22176862640093573, -0.15871798924856134], [-0.18017537724134045, -0.10280390483858562], [-0.4685096854785205, -0.0170029956766148], [-0.4586810295193953, 0.31835164748083794], [-0.5216980879059512, 0.2663869650465916], [-0.22781353804919593, -0.607811024948767], [-0.641869943415196, 0.4598140915313585], [0.11743163466067379, -0.15025118735732268], [-0.45018024098590714, -0.14800650445660027], [-0.29002774609490045, -0.31929264446364547], [-0.0744996362949477, -0.4758971922204083], [-0.06804766075892431, -0.1201526167267234], [0.37477920714403584, -0.30072869614111375], [-0.5360631504446899, -0.048520371491976626], [0.3218750476198819, -0.38173845003504464], [-0.5821575689247289, -0.13002418456574022], [-0.3935639563824319, -0.26844521846650865], [-0.1351356291721819, -0.286249109635652], [0.04338374814022191, -0.22661995875096727], [0.3795520616204416, 0.14798125180809799], [0.7017152350335157, 0.17785945645379225], [0.5943795713333159, 0.23500551419760118], [-0.35075254170834097, -0.014191804183264307], [0.6215197047611543, 0.3525146439848986], [0.6716437423885963, 0.3310034569405475], [0.7231248014415612, 0.2618700001077195], [-0.07820229979360835, 0.24281851238979577], [-0.41181479105749147, 0.126554071136686], [-0.1829362934779138, 0.3023871930706074], [0.8186094829822906, 0.5468428960890863], [0.9966990673512915, 0.7389056848061434], [-0.3747513753960827, -0.5659744918054084], [-0.29496018996307305, 0.3020539421797319], [1.0, 0.33255499294212093], [0.9741665470601403, 0.10487795362870442]], "data02": [[0.0, 0.0]]}, "id": "el2646140586386326136", "plugins": [{"type": "reset"}, {"type": "zoom", "button": true, "enabled": false}, {"type": "boxzoom", "button": true, "enabled": false}, {"type": "tooltip", "id": "el2646140586386898112", "labels": ["apple", "strawberry", "tea", "guava", "tomato", "cocoa", "grape", "mango", "potato", "green beans", "beans", "banana", "lima beans", "orange", "soybean", "papaya", "pineapple", "apricot", "mandarin orange", "mushroom", "lemon", "rice", "black currant", "passionfruit", "plum", "ginger", "pepper", "laurel", "peach", "rosemary", "basil", "oregano", "capsicum", "peanut", "raspberry", "spearmint", "peppermint", "melon", "corn", "marjoram", "nutmeg"], "hoffset": 0, "voffset": 10, "location": "mouse"}]});
        })
     });

} </script>

# use colour & networkx to make a graph with varying sizes of nodes & colors to map flavors
# import csv file of recipes
# algorithm to predict flavors of cuisines - generate new recipes, fusion cuisine
# bonus - predict ratings on recipes