#!/usr/bin/env python # coding: utf-8 # #### New to Plotly? # Plotly's Python library is free and open source! [Get started](https://plotly.com/python/getting-started/) by downloading the client and [reading the primer](https://plotly.com/python/getting-started/). #
You can set up Plotly to work in [online](https://plotly.com/python/getting-started/#initialization-for-online-plotting) or [offline](https://plotly.com/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plotly.com/python/getting-started/#start-plotting-online). #
We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started! # #### Version Check # Note: Dendrograms are available in version 1.8.7+. # Run `pip install plotly --upgrade` to update your Plotly version. # In[1]: import plotly plotly.__version__ # ##### Basic Dendrogram # In[7]: import plotly.plotly as py import plotly.figure_factory as ff import numpy as np X = np.random.rand(15, 15) dendro = ff.create_dendrogram(X) dendro['layout'].update({'width':800, 'height':500}) py.iplot(dendro, filename='simple_dendrogram') # ##### Set Color Threshold # In[3]: import plotly.plotly as py import plotly.figure_factory as ff import numpy as np X = np.random.rand(15, 15) dendro = ff.create_dendrogram(X, color_threshold=1.5) dendro['layout'].update({'width':800, 'height':500}) py.iplot(dendro, filename='simple_dendrogram_with_color_threshold') # ##### Set Orientation and Add Labels # In[4]: import plotly.plotly as py import plotly.figure_factory as ff import numpy as np X = np.random.rand(10, 10) names = ['Jack', 'Oxana', 'John', 'Chelsea', 'Mark', 'Alice', 'Charlie', 'Rob', 'Lisa', 'Lily'] fig = ff.create_dendrogram(X, orientation='left', labels=names) fig['layout'].update({'width':800, 'height':800}) py.iplot(fig, filename='dendrogram_with_labels') # ##### Plot a Dendrogram with a Heatmap # In[5]: import plotly.plotly as py import plotly.graph_objs as go import plotly.figure_factory as ff import numpy as np from scipy.spatial.distance import pdist, squareform # get data data = np.genfromtxt("http://files.figshare.com/2133304/ExpRawData_E_TABM_84_A_AFFY_44.tab", names=True,usecols=tuple(range(1,30)),dtype=float, delimiter="\t") data_array = data.view((np.float, len(data.dtype.names))) data_array = data_array.transpose() labels = data.dtype.names # Initialize figure by creating upper dendrogram figure = ff.create_dendrogram(data_array, orientation='bottom', labels=labels) for i in range(len(figure['data'])): figure['data'][i]['yaxis'] = 'y2' # Create Side Dendrogram dendro_side = ff.create_dendrogram(data_array, orientation='right') for i in range(len(dendro_side['data'])): dendro_side['data'][i]['xaxis'] = 'x2' # Add Side Dendrogram Data to Figure for data in dendro_side['data']: figure.add_trace(data) # Create Heatmap dendro_leaves = dendro_side['layout']['yaxis']['ticktext'] dendro_leaves = list(map(int, dendro_leaves)) data_dist = pdist(data_array) heat_data = squareform(data_dist) heat_data = heat_data[dendro_leaves,:] heat_data = heat_data[:,dendro_leaves] heatmap = [ go.Heatmap( x = dendro_leaves, y = dendro_leaves, z = heat_data, colorscale = 'Blues' ) ] heatmap[0]['x'] = figure['layout']['xaxis']['tickvals'] heatmap[0]['y'] = dendro_side['layout']['yaxis']['tickvals'] # Add Heatmap Data to Figure for data in heatmap: figure.add_trace(data) # Edit Layout figure['layout'].update({'width':800, 'height':800, 'showlegend':False, 'hovermode': 'closest', }) # Edit xaxis figure['layout']['xaxis'].update({'domain': [.15, 1], 'mirror': False, 'showgrid': False, 'showline': False, 'zeroline': False, 'ticks':""}) # Edit xaxis2 figure['layout'].update({'xaxis2': {'domain': [0, .15], 'mirror': False, 'showgrid': False, 'showline': False, 'zeroline': False, 'showticklabels': False, 'ticks':""}}) # Edit yaxis figure['layout']['yaxis'].update({'domain': [0, .85], 'mirror': False, 'showgrid': False, 'showline': False, 'zeroline': False, 'showticklabels': False, 'ticks': ""}) # Edit yaxis2 figure['layout'].update({'yaxis2':{'domain':[.825, .975], 'mirror': False, 'showgrid': False, 'showline': False, 'zeroline': False, 'showticklabels': False, 'ticks':""}}) # Plot! py.iplot(figure, filename='dendrogram_with_heatmap') # In[6]: dendro_side['layout']['xaxis'] # ### Reference # In[8]: help(ff.create_dendrogram) # In[10]: from IPython.display import display, HTML display(HTML('')) display(HTML('')) get_ipython().system(' pip install git+https://github.com/plotly/publisher.git --upgrade') import publisher publisher.publish( 'dendrograms.ipynb', 'python/dendrogram/', 'Python Dendrograms', 'How to make a dendrogram in Python with Plotly. ', name = 'Dendrograms', title = "Dendrograms | Plotly", thumbnail='thumbnail/dendrogram.jpg', language='python', has_thumbnail='true', display_as='scientific', order=6, ipynb= '~notebook_demo/262') # In[ ]: