from math import pi

import pandas as pd
import numpy as np

from bokeh.models import BasicTicker, ColorBar, LinearColorMapper, PrintfTickFormatter
from bokeh.plotting import figure, show


data = pd.read_csv("/home/olafsohr/RBP/src/data/rbp_nM.csv", sep=',', header=None)
rbp_copies = pd.read_csv("/home/olafsohr/RBP/src/data/rbp_copies.csv",\
                         sep=',', header=0, index_col=0)
hepg2 = list(pd.read_csv("/home/olafsohr/RBP/src/data/hepg2_copies.csv",\
                         sep=',', header=0, index_col=0).columns)
data.columns = list(rbp_copies.columns)+hepg2
data.index = rbp_copies.index
data = np.log10(data)
data = data.replace([np.inf, -np.inf], 0)

mapper = LinearColorMapper(palette="Magma256", low=0, high=max(data.max()))
#mapper = LogColorMapper(palette="Viridis256", low=0, high=max(data.max()))
TOOLS = "hover,save,pan,box_zoom,reset,wheel_zoom"

df = pd.DataFrame(data.stack(),columns=['Concentration']).reset_index()
df.columns = ["RBP","Tissue","Concentration"]
print(df)

p = figure(title="RBP Concentrations by Tissue",\
           x_range = list(data.index), y_range = list(data.columns),\
           x_axis_location = "above", width=1000, height=400,\
           tools = TOOLS, toolbar_location="below")

p.grid.grid_line_color = None
p.axis.axis_line_color = None
p.axis.major_tick_line_color = None
p.axis.major_label_text_font_size = "7px"
p.axis.major_label_standoff = 0
p.xaxis.major_label_orientation = pi / 3

p.rect(x="RBP", y="Tissue", width=1, height=1, source=df,\
       fill_color={'field':'Concentration', 'transform':mapper},\
       line_color=None)


color_bar = ColorBar(color_mapper=mapper, major_label_text_font_size="7px",\
                     formatter=PrintfTickFormatter(format="%d%%"),\
                     label_standoff=6, border_line_color=None)

p.add_layout(color_bar, 'right')

show(p)
