import geopandas as gpd
import pandas as pd
from libpysal.weights.contiguity import Queen
from libpysal import examples
import numpy as np
import matplotlib.pyplot as plt
from giddy.directional import Rose
from splot.giddy import dynamic_lisa_heatmap

# get csv and shp files

shp_link = examples.get_path('us48.shp')
df = gpd.read_file(shp_link)
income_table = pd.read_csv(examples.get_path("usjoin.csv"))

# calculate relative values

for year in range(1969, 2010):
    income_table[str(year) + '_rel'] = (
        income_table[str(year)] / income_table[str(year)].mean())

# merge to one gdf

gdf = df.merge(income_table,left_on='STATE_NAME',right_on='Name')

# retrieve spatial weights and data for two points in time

w = Queen.from_dataframe(gdf)
w.transform = 'r'
y1 = gdf['1969_rel'].values
y2 = gdf['2000_rel'].values

# calculate rose Object

Y = np.array([y1, y2]).T
rose = Rose(Y, w, k=5)

# plot

dynamic_lisa_heatmap(rose)
plt.show()

# customize plot

dynamic_lisa_heatmap(rose, cbar='GnBu')
plt.show()
