#!/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 # In[1]: import plotly plotly.__version__ # #### Simple Line Plot # In[2]: import plotly.plotly as py import plotly.graph_objs as go # Create random data with numpy import numpy as np N = 500 random_x = np.linspace(0, 1, N) random_y = np.random.randn(N) # Create a trace trace = go.Scatter( x = random_x, y = random_y ) data = [trace] py.iplot(data, filename='basic-line') # #### Line Plot Modes # In[3]: import plotly.plotly as py import plotly.graph_objs as go # Create random data with numpy import numpy as np N = 100 random_x = np.linspace(0, 1, N) random_y0 = np.random.randn(N)+5 random_y1 = np.random.randn(N) random_y2 = np.random.randn(N)-5 # Create traces trace0 = go.Scatter( x = random_x, y = random_y0, mode = 'lines', name = 'lines' ) trace1 = go.Scatter( x = random_x, y = random_y1, mode = 'lines+markers', name = 'lines+markers' ) trace2 = go.Scatter( x = random_x, y = random_y2, mode = 'markers', name = 'markers' ) data = [trace0, trace1, trace2] py.iplot(data, filename='line-mode') # #### Style Line Plots # This example styles the color and dash of the traces, adds trace names, # modifiys line width, and adds plot and axes titles. # In[4]: import plotly.plotly as py import plotly.graph_objs as go # Add data month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] high_2000 = [32.5, 37.6, 49.9, 53.0, 69.1, 75.4, 76.5, 76.6, 70.7, 60.6, 45.1, 29.3] low_2000 = [13.8, 22.3, 32.5, 37.2, 49.9, 56.1, 57.7, 58.3, 51.2, 42.8, 31.6, 15.9] high_2007 = [36.5, 26.6, 43.6, 52.3, 71.5, 81.4, 80.5, 82.2, 76.0, 67.3, 46.1, 35.0] low_2007 = [23.6, 14.0, 27.0, 36.8, 47.6, 57.7, 58.9, 61.2, 53.3, 48.5, 31.0, 23.6] high_2014 = [28.8, 28.5, 37.0, 56.8, 69.7, 79.7, 78.5, 77.8, 74.1, 62.6, 45.3, 39.9] low_2014 = [12.7, 14.3, 18.6, 35.5, 49.9, 58.0, 60.0, 58.6, 51.7, 45.2, 32.2, 29.1] # Create and style traces trace0 = go.Scatter( x = month, y = high_2014, name = 'High 2014', line = dict( color = ('rgb(205, 12, 24)'), width = 4) ) trace1 = go.Scatter( x = month, y = low_2014, name = 'Low 2014', line = dict( color = ('rgb(22, 96, 167)'), width = 4,) ) trace2 = go.Scatter( x = month, y = high_2007, name = 'High 2007', line = dict( color = ('rgb(205, 12, 24)'), width = 4, dash = 'dash') # dash options include 'dash', 'dot', and 'dashdot' ) trace3 = go.Scatter( x = month, y = low_2007, name = 'Low 2007', line = dict( color = ('rgb(22, 96, 167)'), width = 4, dash = 'dash') ) trace4 = go.Scatter( x = month, y = high_2000, name = 'High 2000', line = dict( color = ('rgb(205, 12, 24)'), width = 4, dash = 'dot') ) trace5 = go.Scatter( x = month, y = low_2000, name = 'Low 2000', line = dict( color = ('rgb(22, 96, 167)'), width = 4, dash = 'dot') ) data = [trace0, trace1, trace2, trace3, trace4, trace5] # Edit the layout layout = dict(title = 'Average High and Low Temperatures in New York', xaxis = dict(title = 'Month'), yaxis = dict(title = 'Temperature (degrees F)'), ) fig = dict(data=data, layout=layout) py.iplot(fig, filename='styled-line') # #### Connect Data Gaps # In[5]: import plotly.plotly as py import plotly.graph_objs as go trace1 = go.Scatter( x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], y=[10, 20, None, 15, 10, 5, 15, None, 20, 10, 10, 15, 25, 20, 10], name = 'No Gaps', # Style name/legend entry with html tags connectgaps=True ) trace2 = go.Scatter( x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], y=[5, 15, None, 10, 5, 0, 10, None, 15, 5, 5, 10, 20, 15, 5], name = 'Gaps', ) data = [trace1, trace2] fig = dict(data=data) py.iplot(fig, filename='simple-connectgaps') # #### Interpolation with Line Plots # In[6]: import plotly.plotly as py import plotly.graph_objs as go trace1 = go.Scatter( x=[1, 2, 3, 4, 5], y=[1, 3, 2, 3, 1], mode='lines+markers', name="'linear'", hoverinfo='name', line=dict( shape='linear' ) ) trace2 = go.Scatter( x=[1, 2, 3, 4, 5], y=[6, 8, 7, 8, 6], mode='lines+markers', name="'spline'", text=["tweak line smoothness
with 'smoothing' in line object"], hoverinfo='text+name', line=dict( shape='spline' ) ) trace3 = go.Scatter( x=[1, 2, 3, 4, 5], y=[11, 13, 12, 13, 11], mode='lines+markers', name="'vhv'", hoverinfo='name', line=dict( shape='vhv' ) ) trace4 = go.Scatter( x=[1, 2, 3, 4, 5], y=[16, 18, 17, 18, 16], mode='lines+markers', name="'hvh'", hoverinfo='name', line=dict( shape='hvh' ) ) trace5 = go.Scatter( x=[1, 2, 3, 4, 5], y=[21, 23, 22, 23, 21], mode='lines+markers', name="'vh'", hoverinfo='name', line=dict( shape='vh' ) ) trace6 = go.Scatter( x=[1, 2, 3, 4, 5], y=[26, 28, 27, 28, 26], mode='lines+markers', name="'hv'", hoverinfo='name', line=dict( shape='hv' ) ) data = [trace1, trace2, trace3, trace4, trace5, trace6] layout = dict( legend=dict( y=0.5, traceorder='reversed', font=dict( size=16 ) ) ) fig = dict(data=data, layout=layout) py.iplot(fig, filename='line-shapes') # #### Label Lines with Annotations # In[12]: import plotly.plotly as py import plotly.graph_objs as go title = 'Main Source for News' labels = ['Television', 'Newspaper', 'Internet', 'Radio'] colors = ['rgb(67,67,67)', 'rgb(115,115,115)', 'rgb(49,130,189)', 'rgb(189,189,189)'] mode_size = [8, 8, 12, 8] line_size = [2, 2, 4, 2] x_data = [ [2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013], [2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013], [2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013], [2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013], ] y_data = [ [74, 82, 80, 74, 73, 72, 74, 70, 70, 66, 66, 69], [45, 42, 50, 46, 36, 36, 34, 35, 32, 31, 31, 28], [13, 14, 20, 24, 20, 24, 24, 40, 35, 41, 43, 50], [18, 21, 18, 21, 16, 14, 13, 18, 17, 16, 19, 23], ] traces = [] for i in range(0, 4): traces.append(go.Scatter( x=x_data[i], y=y_data[i], mode='lines', line=dict(color=colors[i], width=line_size[i]), connectgaps=True, )) traces.append(go.Scatter( x=[x_data[i][0], x_data[i][11]], y=[y_data[i][0], y_data[i][11]], mode='markers', marker=dict(color=colors[i], size=mode_size[i]) )) layout = go.Layout( xaxis=dict( showline=True, showgrid=False, showticklabels=True, linecolor='rgb(204, 204, 204)', linewidth=2, ticks='outside', tickcolor='rgb(204, 204, 204)', tickwidth=2, ticklen=5, tickfont=dict( family='Arial', size=12, color='rgb(82, 82, 82)', ), ), yaxis=dict( showgrid=False, zeroline=False, showline=False, showticklabels=False, ), autosize=False, margin=dict( autoexpand=False, l=100, r=20, t=110, ), showlegend=False ) annotations = [] # Adding labels for y_trace, label, color in zip(y_data, labels, colors): # labeling the left_side of the plot annotations.append(dict(xref='paper', x=0.05, y=y_trace[0], xanchor='right', yanchor='middle', text=label + ' {}%'.format(y_trace[0]), font=dict(family='Arial', size=16), showarrow=False)) # labeling the right_side of the plot annotations.append(dict(xref='paper', x=0.95, y=y_trace[11], xanchor='left', yanchor='middle', text='{}%'.format(y_trace[11]), font=dict(family='Arial', size=16), showarrow=False)) # Title annotations.append(dict(xref='paper', yref='paper', x=0.0, y=1.05, xanchor='left', yanchor='bottom', text='Main Source for News', font=dict(family='Arial', size=30, color='rgb(37,37,37)'), showarrow=False)) # Source annotations.append(dict(xref='paper', yref='paper', x=0.5, y=-0.1, xanchor='center', yanchor='top', text='Source: PewResearch Center & ' + 'Storytelling with data', font=dict(family='Arial', size=12, color='rgb(150,150,150)'), showarrow=False)) layout['annotations'] = annotations fig = go.Figure(data=traces, layout=layout) py.iplot(fig, filename='news-source') # #### Filled Lines # In[13]: import plotly.plotly as py import plotly.graph_objs as go x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] x_rev = x[::-1] # Line 1 y1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y1_upper = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11] y1_lower = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] y1_lower = y1_lower[::-1] # Line 2 y2 = [5, 2.5, 5, 7.5, 5, 2.5, 7.5, 4.5, 5.5, 5] y2_upper = [5.5, 3, 5.5, 8, 6, 3, 8, 5, 6, 5.5] y2_lower = [4.5, 2, 4.4, 7, 4, 2, 7, 4, 5, 4.75] y2_lower = y2_lower[::-1] # Line 3 y3 = [10, 8, 6, 4, 2, 0, 2, 4, 2, 0] y3_upper = [11, 9, 7, 5, 3, 1, 3, 5, 3, 1] y3_lower = [9, 7, 5, 3, 1, -.5, 1, 3, 1, -1] y3_lower = y3_lower[::-1] trace1 = go.Scatter( x=x+x_rev, y=y1_upper+y1_lower, fill='tozerox', fillcolor='rgba(0,100,80,0.2)', line=dict(color='rgba(255,255,255,0)'), showlegend=False, name='Fair', ) trace2 = go.Scatter( x=x+x_rev, y=y2_upper+y2_lower, fill='tozerox', fillcolor='rgba(0,176,246,0.2)', line=dict(color='rgba(255,255,255,0)'), name='Premium', showlegend=False, ) trace3 = go.Scatter( x=x+x_rev, y=y3_upper+y3_lower, fill='tozerox', fillcolor='rgba(231,107,243,0.2)', line=dict(color='rgba(255,255,255,0)'), showlegend=False, name='Fair', ) trace4 = go.Scatter( x=x, y=y1, line=dict(color='rgb(0,100,80)'), mode='lines', name='Fair', ) trace5 = go.Scatter( x=x, y=y2, line=dict(color='rgb(0,176,246)'), mode='lines', name='Premium', ) trace6 = go.Scatter( x=x, y=y3, line=dict(color='rgb(231,107,243)'), mode='lines', name='Ideal', ) data = [trace1, trace2, trace3, trace4, trace5, trace6] layout = go.Layout( paper_bgcolor='rgb(255,255,255)', plot_bgcolor='rgb(229,229,229)', xaxis=dict( gridcolor='rgb(255,255,255)', range=[1,10], showgrid=True, showline=False, showticklabels=True, tickcolor='rgb(127,127,127)', ticks='outside', zeroline=False ), yaxis=dict( gridcolor='rgb(255,255,255)', showgrid=True, showline=False, showticklabels=True, tickcolor='rgb(127,127,127)', ticks='outside', zeroline=False ), ) fig = go.Figure(data=data, layout=layout) py.iplot(fig, filename= 'shaded_lines') # ### 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-lineplot) can easily be deployed to a PaaS. # # In[6]: from IPython.display import IFrame IFrame(src= "https://dash-simple-apps.plotly.host/dash-lineplot/", width="100%", height="650px", frameBorder="0") # In[2]: from IPython.display import IFrame IFrame(src= "https://dash-simple-apps.plotly.host/dash-lineplot/code", width="100%", height=500, frameBorder="0") # #### Reference # See https://plotly.com/python/reference/#scatter 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( 'lines.ipynb', 'python/line-charts/', 'Python Line Charts', 'How to make line charts in Python with Plotly. ' 'Examples on creating and styling line charts in Python with Plotly.', title = 'Python Line Charts | plotly', name = 'Line Charts', thumbnail='thumbnail/line-plot.jpg', language='python', page_type='example_index', has_thumbnail='true', display_as='basic', order=3.3, ipynb= '~notebook_demo/3') # In[ ]: