#!/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 # Plotly's python package is updated frequently. Run `pip install plotly --upgrade` to use the latest version. # In[1]: import plotly plotly.__version__ # ### Adding Text to Data in Line and Scatter Plots # In[1]: import plotly.plotly as py import plotly.graph_objs as go trace1 = go.Scatter( x=[0, 1, 2], y=[1, 1, 1], mode='lines+markers+text', name='Lines, Markers and Text', text=['Text A', 'Text B', 'Text C'], textposition='top center' ) trace2 = go.Scatter( x=[0, 1, 2], y=[2, 2, 2], mode='markers+text', name='Markers and Text', text=['Text D', 'Text E', 'Text F'], textposition='bottom center' ) trace3 = go.Scatter( x=[0, 1, 2], y=[3, 3, 3], mode='lines+text', name='Lines and Text', text=['Text G', 'Text H', 'Text I'], textposition='bottom center' ) data = [trace1, trace2, trace3] layout = go.Layout( showlegend=False ) fig = go.Figure(data=data, layout=layout) py.iplot(fig, filename='text-chart-basic') # ### Adding Hover Text to Data in Line and Scatter Plots # In[3]: import plotly.plotly as py import plotly.graph_objs as go data = [ go.Scatter( x=[0, 1, 2], y=[1, 3, 2], mode='markers', text=['Text A', 'Text B', 'Text C'] ) ] layout = go.Layout( title='Hover over the points to see the text' ) fig = go.Figure(data=data, layout=layout) py.iplot(fig, filename='hover-chart-basic') # ### Simple Annotation # In[4]: import plotly.plotly as py import plotly.graph_objs as go trace1 = go.Scatter( x=[0, 1, 2, 3, 4, 5, 6, 7, 8], y=[0, 1, 3, 2, 4, 3, 4, 6, 5] ) trace2 = go.Scatter( x=[0, 1, 2, 3, 4, 5, 6, 7, 8], y=[0, 4, 5, 1, 2, 2, 3, 4, 2] ) data = [trace1, trace2] layout = go.Layout( showlegend=False, annotations=[ dict( x=2, y=5, xref='x', yref='y', text='dict Text', showarrow=True, arrowhead=7, ax=0, ay=-40 ) ] ) fig = go.Figure(data=data, layout=layout) py.iplot(fig, filename='simple-annotation') # ### Multiple Annotations # In[5]: import plotly.plotly as py import plotly.graph_objs as go trace1 = go.Scatter( x=[0, 1, 2, 3, 4, 5, 6, 7, 8], y=[0, 1, 3, 2, 4, 3, 4, 6, 5] ) trace2 = go.Scatter( x=[0, 1, 2, 3, 4, 5, 6, 7, 8], y=[0, 4, 5, 1, 2, 2, 3, 4, 2] ) data = [trace1, trace2] layout = go.Layout( showlegend=False, annotations=[ dict( x=2, y=5, xref='x', yref='y', text='dict Text', showarrow=True, arrowhead=7, ax=0, ay=-40 ), dict( x=4, y=4, xref='x', yref='y', text='dict Text 2', showarrow=True, arrowhead=7, ax=0, ay=-40 ) ] ) fig = go.Figure(data=data, layout=layout) py.iplot(fig, filename='multiple-annotation') # ### 3D Annotations # In[2]: import plotly.plotly as py import plotly.graph_objs as go data = [go.Scatter3d( x = ["2017-01-01", "2017-02-10", "2017-03-20"], y = ["A", "B", "C"], z = [1, 1000, 100000], name = "z", )] layout = go.Layout( scene = dict( aspectratio = dict( x = 1, y = 1, z = 1 ), camera = dict( center = dict( x = 0, y = 0, z = 0 ), eye = dict( x = 1.96903462608, y = -1.09022831971, z = 0.405345349304 ), up = dict( x = 0, y = 0, z = 1 ) ), dragmode = "turntable", xaxis = dict( title = "", type = "date" ), yaxis = dict( title = "", type = "category" ), zaxis = dict( title = "", type = "log" ), annotations = [dict( showarrow = False, x = "2017-01-01", y = "A", z = 0, text = "Point 1", xanchor = "left", xshift = 10, opacity = 0.7 ), dict( x = "2017-02-10", y = "B", z = 4, text = "Point 2", textangle = 0, ax = 0, ay = -75, font = dict( color = "black", size = 12 ), arrowcolor = "black", arrowsize = 3, arrowwidth = 1, arrowhead = 1 ), dict( x = "2017-03-20", y = "C", z = 5, ax = 50, ay = 0, text = "Point 3", arrowhead = 1, xanchor = "left", yanchor = "bottom" )] ), xaxis = dict(title = "x"), yaxis = dict(title = "y") ) fig = go.Figure(data=data, layout=layout) py.iplot(fig, filename = "3d annotations") # ### Custom Text Color and Styling # In[3]: import plotly.plotly as py import plotly.graph_objs as go trace1 = go.Scatter( x=[0, 1, 2], y=[1, 1, 1], mode='lines+markers+text', name='Lines, Markers and Text', text=['Text A', 'Text B', 'Text C'], textposition='top right', textfont=dict( family='sans serif', size=18, color='#1f77b4' ) ) trace2 = go.Scatter( x=[0, 1, 2], y=[2, 2, 2], mode='lines+markers+text', name='Lines and Text', text=['Text G', 'Text H', 'Text I'], textposition='bottom center', textfont=dict( family='sans serif', size=18, color='#ff7f0e' ) ) data = [trace1, trace2] layout = go.Layout( showlegend=False ) fig = go.Figure(data=data, layout=layout) py.iplot(fig, filename='text-chart-styling') # ### Styling and Coloring Annotations # In[8]: import plotly.plotly as py import plotly.graph_objs as go trace1 = go.Scatter( x=[0, 1, 2, 3, 4, 5, 6, 7, 8], y=[0, 1, 3, 2, 4, 3, 4, 6, 5] ) trace2 = go.Scatter( x=[0, 1, 2, 3, 4, 5, 6, 7, 8], y=[0, 4, 5, 1, 2, 2, 3, 4, 2] ) data = [trace1, trace2] layout = go.Layout( showlegend=False, annotations=[ dict( x=2, y=5, xref='x', yref='y', text='max=5', showarrow=True, font=dict( family='Courier New, monospace', size=16, color='#ffffff' ), align='center', arrowhead=2, arrowsize=1, arrowwidth=2, arrowcolor='#636363', ax=20, ay=-30, bordercolor='#c7c7c7', borderwidth=2, borderpad=4, bgcolor='#ff7f0e', opacity=0.8 ) ] ) fig = go.Figure(data=data, layout=layout) py.iplot(fig, filename='style-annotation') # ### Disabling Hover Text # In[9]: import plotly.plotly as py trace = dict( x=[1, 2, 3,], y=[10, 30, 15], type='scatter', name='first trace', hoverinfo='none' ) py.iplot([trace], filename='hoverinfo=none') # ### Text Font as an Array - Styling Each Text Element # In[10]: import plotly.plotly as py import plotly.graph_objs as go fig = go.Figure( data=[ go.Scattergeo( lat=[45.5,43.4,49.13,51.1,53.34,45.24,44.64,48.25,49.89,50.45], lon=[-73.57,-79.24,-123.06,-114.1,-113.28,-75.43,-63.57,-123.21,-97.13,-104.6], marker={ "color": ["#bebada","#fdb462","#fb8072","#d9d9d9","#bc80bd","#b3de69","#8dd3c7","#80b1d3","#fccde5","#ffffb3"], "line": { "width": 1 }, "size": 10 }, mode="markers+text", name="", text=["Montreal","Toronto","Vancouver","Calgary","Edmonton","Ottawa","Halifax","Victoria","Winnepeg","Regina"], textfont={ "color": ["#bebada","#fdb462","#fb8072","#d9d9d9","#bc80bd","#b3de69","#8dd3c7","#80b1d3","#fccde5","#ffffb3"], "family": ["Arial, sans-serif","Balto, sans-serif","Courier New, monospace","Droid Sans, sans-serif","Droid Serif, serif","Droid Sans Mono, sans-serif","Gravitas One, cursive","Old Standard TT, serif","Open Sans, sans-serif","PT Sans Narrow, sans-serif","Raleway, sans-serif","Times New Roman, Times, serif"], "size": [22,21,20,19,18,17,16,15,14,13] }, textposition=["top center","middle left","top center","bottom center","top right","middle left","bottom right","bottom left","top right","top right"] ) ], layout={ "title": "Canadian cities", "geo": { "lataxis": { "range": [40, 70] }, "lonaxis": { "range": [-130, -55] }, "scope": "north america" } } ) py.iplot(fig, filename='Canadian Cities') # ### Adding Annotations with xref and yref as Paper # In[11]: import plotly.plotly as py import plotly.graph_objs as go data = [ go.Scatter( x=[1, 2, 3], y=[1, 2, 3], name='y', ) ] layout = go.Layout( annotations=[ dict( x=0.5004254919715793, y=-0.16191064079952971, showarrow=False, text='Custom x-axis title', xref='paper', yref='paper' ), dict( x=-0.04944728761514841, y=0.4714285714285711, showarrow=False, text='Custom y-axis title', textangle=-90, xref='paper', yref='paper' ) ], autosize=True, margin=dict( b=100 ), title='Plot Title', xaxis=dict( autorange=False, range=[-0.05674507980728292, -0.0527310420933204], type='linear' ), yaxis=dict( autorange=False, range=[1.2876210047544652, 1.2977732997811402], type='linear' ), height=550, width=1137 ) fig = go.Figure(data=data, layout=layout) py.iplot(fig) # ### Dash Example # [Dash](https://plotly.com/products/dash/) is an Open Source Python library which can help you convert plotly figures into a reactive, web-based application. Below is a simple example of a dashboard created using Dash. Its [source code](https://github.com/plotly/simple-example-chart-apps/tree/master/dash-text-annotationsplot) can easily be deployed to a PaaS. # In[2]: from IPython.display import IFrame IFrame(src= "https://dash-simple-apps.plotly.host/dash-text-annotationsplot/", width="100%", height="750px", frameBorder="0") # In[1]: from IPython.display import IFrame IFrame(src= "https://dash-simple-apps.plotly.host/dash-text-annotationsplot/code", width="100%", height=500, frameBorder="0") # #### Reference # See https://plotly.com/python/reference/#layout-annotations for more information and chart attribute options! # In[3]: 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( 'text-and-annotations.ipynb', 'python/text-and-annotations/', 'Text and Annotations', 'How to add text labels and annotations to plots in python.', title = 'Text and Annotations | plotly', thumbnail='thumbnail/text-and-annotations.jpg', language='python', has_thumbnail='true', display_as='file_settings', order=30, ipynb='~notebook_demo/204', uses_plotly_offline=False)