Source code for aggmap.utils.vismap

from scipy.cluster.hierarchy import dendrogram, linkage, to_tree
from scipy.spatial.distance import squareform
import seaborn as sns
from highcharts import Highchart
import pandas as pd
import numpy as np
import os

from aggmap.utils.logtools import print_info


[docs]def plot_scatter(mp, htmlpath = './', htmlname = None, radius = 2, enabled_data_labels = False): ''' mp: the object of mp htmlpath: the figure path, not include the prefix of 'html' htmlname: the name radius: int, defaut:3, the radius of scatter dot ''' title = '2D emmbedding of %s based on %s method' % (mp.ftype, mp.emb_method) subtitle = 'number of %s: %s, metric method: %s' % (mp.ftype, len(mp.flist), mp.metric) name = '%s_%s_%s_%s_%s' % (mp.ftype,len(mp.flist), mp.metric, mp.emb_method, 'scatter') if not os.path.exists(htmlpath): os.makedirs(htmlpath) if htmlname: name = htmlname + '_' + name filename = os.path.join(htmlpath, name) print_info('generate file: %s' % filename) colormaps = mp.colormaps df = mp.df_scatter H = Highchart(width=1000, height=850) H.set_options('chart', {'type': 'scatter', 'zoomType': 'xy'}) H.set_options('title', {'text': title}) H.set_options('subtitle', {'text': subtitle}) H.set_options('xAxis', {'title': {'enabled': True,'text': 'X', 'style':{'fontSize':20}}, 'labels':{'style':{'fontSize':20}}, 'gridLineWidth': 1, 'startOnTick': True, 'endOnTick': True, 'showLastLabel': True}) H.set_options('yAxis', {'title': {'text': 'Y', 'style':{'fontSize':20}}, 'labels':{'style':{'fontSize':20}}, 'gridLineWidth': 1,}) # H.set_options('legend', {'layout': 'horizontal','verticalAlign': 'top','align':'right','floating': False, # 'backgroundColor': "(Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'", # 'borderWidth': 1}) H.set_options('legend', {'align': 'right', 'layout': 'vertical', 'margin': 1, 'verticalAlign': 'top', 'y':40, 'symbolHeight': 12, 'floating': False,}) H.set_options('plotOptions', {'scatter': {'marker': {'radius': radius, 'states': {'hover': {'enabled': True, 'lineColor': 'rgb(100,100,100)'}}}, 'states': {'hover': {'marker': {'enabled': False} }}, 'tooltip': {'headerFormat': '<b>{series.name}</b><br>', 'pointFormat': '{point.IDs}'}}, 'series': {'turboThreshold': 5000, 'dataLabels': {'enabled': enabled_data_labels, 'format': '{point.IDs}'}} }) for subtype, color in colormaps.items(): dfi = df[df['Subtypes'] == subtype] if len(dfi) == 0: continue data = dfi.to_dict('records') H.add_data_set(data, 'scatter', subtype, color=color) H.save_file(filename) print_info('save html file to %s' % filename) return H
[docs]def plot_grid(mp, htmlpath = './', htmlname = None, enabled_data_labels = False): ''' mp: the object of mp htmlpath: the figure path ''' if not os.path.exists(htmlpath): os.makedirs(htmlpath) title = 'Assignment of %s by %s emmbedding result' % (mp.ftype, mp.emb_method) subtitle = 'number of %s: %s, metric method: %s' % (mp.ftype, len(mp.flist), mp.metric) name = '%s_%s_%s_%s_%s' % (mp.ftype,len(mp.flist), mp.metric, mp.emb_method, 'mp') if htmlname: name = name = htmlname + '_' + name filename = os.path.join(htmlpath, name) print_info('generate file: %s' % filename) colormaps = mp.colormaps df = mp.df_grid H = Highchart(width=1000, height=850) H.set_options('chart', {'type': 'heatmap', 'zoomType': 'xy'}) H.set_options('title', {'text': title}) H.set_options('subtitle', {'text': subtitle}) # H.set_options('xAxis', {'title': '', # 'min': 0, 'max': mp._S.fmap_shape[1]-1, # 'allowDecimals':False, # 'labels':{'style':{'fontSize':20}}}) # H.set_options('yAxis', {'title': '', 'tickPosition': 'inside', # 'min': 0, 'max': mp._S.fmap_shape[0]-1, # 'reversed': True, # 'allowDecimals':False, # 'labels':{'style':{'fontSize':20}}}) H.set_options('xAxis', {'title': None, 'min': 0, 'max': mp.fmap_shape[1]-1, 'startOnTick': False, 'endOnTick': False, 'allowDecimals':False, 'labels':{'style':{'fontSize':20}}}) H.set_options('yAxis', {'title': {'text': ' ', 'style':{'fontSize':20}}, 'startOnTick': False, 'endOnTick': False, 'gridLineWidth': 0, 'reversed': True, 'min': 0, 'max': mp.fmap_shape[0]-1, 'allowDecimals':False, 'labels':{'style':{'fontSize':20}}}) H.set_options('legend', {'align': 'right', 'layout': 'vertical', 'margin': 1, 'verticalAlign': 'top', 'y': 60, 'symbolHeight': 12, 'floating': False,}) H.set_options('tooltip', {'headerFormat': '<b>{series.name}</b><br>', 'pointFormat': '{point.v}'}) H.set_options('plotOptions', {'series': {'turboThreshold': 5000, 'dataLabels': {'enabled': enabled_data_labels, 'format': '{point.v}', 'style': {'textOutline':False, 'color': 'black'}, } } } ) for subtype, color in colormaps.items(): dfi = df[df['Subtypes'] == subtype] if len(dfi) == 0: continue H.add_data_set(dfi.to_dict('records'), 'heatmap', name = subtype, #dataLabels = {'enabled': True, 'color': color} color = color, ) H.save_file(filename) print_info('save html file to %s' % filename) return H
def _getNewick(node, newick, parentdist, leaf_names): if node.is_leaf(): return "%s:%.2f%s" % (leaf_names[node.id], parentdist - node.dist, newick) else: if len(newick) > 0: newick = "):%.2f%s" % (parentdist - node.dist, newick) else: newick = ");" newick = _getNewick(node.get_left(), newick, node.dist, leaf_names) newick = _getNewick(node.get_right(), ",%s" % (newick), node.dist, leaf_names) newick = "(%s" % (newick) return newick def _mp2newick(mp, treefile = 'mytree'): dist_matrix = mp.dist_matrix leaf_names = mp.flist df = mp.df_embedding[['colors','Subtypes']] dists = squareform(dist_matrix) linkage_matrix = linkage(dists, 'complete') tree = to_tree(linkage_matrix, rd=False) newick = getNewick(tree, "", tree.dist, leaf_names = leaf_names) with open(treefile + '.nwk', 'w') as f: f.write(newick) df.to_excel(treefile + '.xlsx')
[docs]def plot_tree(mp, htmlpath = './', htmlname = None): pass