<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Isabella</title>
    <description>The latest articles on DEV Community by Isabella (@isabellabenabaye).</description>
    <link>https://dev.to/isabellabenabaye</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F388875%2F11be996b-ac54-4219-b1b2-7bbf8e4f5c81.jpeg</url>
      <title>DEV Community: Isabella</title>
      <link>https://dev.to/isabellabenabaye</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/isabellabenabaye"/>
    <language>en</language>
    <item>
      <title>Bar plots in Bokeh &amp; How to Embed Them</title>
      <dc:creator>Isabella</dc:creator>
      <pubDate>Wed, 17 Jun 2020 20:02:24 +0000</pubDate>
      <link>https://dev.to/isabellabenabaye/bar-plots-in-bokeh-how-to-embed-them-58d2</link>
      <guid>https://dev.to/isabellabenabaye/bar-plots-in-bokeh-how-to-embed-them-58d2</guid>
      <description>&lt;p&gt;This is my second post about exploring the Los Angeles Times' database of police killings in L.A. County. My first one was about &lt;a href="https://dev.to/isabellabenabaye/scatter-plots-on-mapbox-with-plotly-express-in-python-how-to-embed-them-1l8m"&gt;mapping where each Black person who was killed by police in L.A. County died&lt;/a&gt;. In my main &lt;a href="https://isabella-b.com/blog/los-angeles-police-killings"&gt;blog post&lt;/a&gt; I wanted to learn more about the Black and Latino communities that have been disproportionately affected by police violence and made a &lt;a href="https://isabella-b.com/blog/los-angeles-police-killings/#full-graphic"&gt;simple graphic&lt;/a&gt; about it. &lt;/p&gt;

&lt;p&gt;To try out a simple chart for my first experience with &lt;code&gt;Bokeh&lt;/code&gt;, I decided to recreate this horizontal bar chart I made for the graphic of my main post:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MbjwB6oS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cc7z92anre19rfqdd0fc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MbjwB6oS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cc7z92anre19rfqdd0fc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Interactive version&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://localhost:1313/today-i-learned-posts/bokeh-plots-embed/#hover-to-see-the-count"&gt;Live plot&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eiR54K3W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b669qir1d9vki6gf4il2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eiR54K3W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b669qir1d9vki6gf4il2.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creating this required one step before making the plot itself. Since this is a horizontal bar chart, we need to make a list of factors to pass into the categorical x-axis with the argument &lt;code&gt;y_range&lt;/code&gt; in &lt;code&gt;figure()&lt;/code&gt;. This DataFrame is my source for the plot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;top_neighborhoods&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;killings_data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;killings_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;race&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;'black'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;neighborhood&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;to_frame&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'neighborhood'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ascending&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IPnfuVW2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ou8t1xpni3qq02l4sqkz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IPnfuVW2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ou8t1xpni3qq02l4sqkz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To make the list of categorical factors we use &lt;code&gt;ColumnDataSource()&lt;/code&gt; from &lt;code&gt;bokeh.models&lt;/code&gt; and &lt;code&gt;tolist()&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;bokeh.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ColumnDataSource&lt;/span&gt;
&lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ColumnDataSource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;top_neighborhoods&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;neighborhoods&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'index'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;tolist&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now we can make the plot. Here are the necessary imports and comments describing them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;bokeh.plotting&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_file&lt;/span&gt; &lt;span class="c1"&gt;# output_file = output as HTML
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;bokeh.models.tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HoverTool&lt;/span&gt; &lt;span class="c1"&gt;# for hover tooltip
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;bokeh.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Axis&lt;/span&gt;            &lt;span class="c1"&gt;# for axis settings
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;bokeh.io&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;output_notebook&lt;/span&gt;     &lt;span class="c1"&gt;# optional: to output in notebook
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Create the figure with &lt;code&gt;figure()&lt;/code&gt; and set the plot dimensions, the y categorical values using the created list, and optionally remove the toolbar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;output_notebook&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# optional: show the output in the notebook
&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plot_width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;750&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;plot_height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="n"&gt;y_range&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;neighborhoods&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# use the list as the range of y values
&lt;/span&gt;            &lt;span class="n"&gt;toolbar_location&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# remove the toolbar since it isn't needed for this plot
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Create the plot by defining the following:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;source&lt;/code&gt; - the &lt;code&gt;source&lt;/code&gt; object we made with &lt;code&gt;ColumnDataSource()&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;y&lt;/code&gt; - the categorical y variable&lt;br&gt;&lt;br&gt;
&lt;code&gt;right&lt;/code&gt; - the numeric x variable&lt;br&gt;&lt;br&gt;
&lt;code&gt;height&lt;/code&gt; - height of the bars, a value between 0 and 1&lt;br&gt;&lt;br&gt;
&lt;code&gt;line_color&lt;/code&gt; - color of the outline of the bars&lt;br&gt;&lt;br&gt;
&lt;code&gt;color&lt;/code&gt; - color of the bars&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# create the horizontal bar chart
&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hbar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'index'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'neighborhood'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line_color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'white'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"#DF8F44"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The following are the optional hover and style settings for this plot with their purposes commented:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x_range&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;  &lt;span class="c1"&gt;# start value of the x-axis
&lt;/span&gt;&lt;span class="n"&gt;hover&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HoverTool&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# initiate hover tool
&lt;/span&gt;&lt;span class="n"&gt;hover&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tooltips&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="s"&gt;"Neighborhood"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"@index"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;   &lt;span class="c1"&gt;## define the content of the hover tooltip
&lt;/span&gt;                   &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Number of killnings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"@neighborhood"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="n"&gt;hover&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'hline'&lt;/span&gt; &lt;span class="c1"&gt;# set the mode of the hover tool
&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_tools&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hover&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# add the hover tooltip to the plot
# style the plot
&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xaxis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;major_label_text_font&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'IBM Plex Mono'&lt;/span&gt;
&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xaxis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;major_label_text_font_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'12pt'&lt;/span&gt;
&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;yaxis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;major_label_text_font&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'IBM Plex Mono'&lt;/span&gt;
&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;yaxis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;major_label_text_font_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'13pt'&lt;/span&gt;
&lt;span class="c1"&gt;# output the HTML file
&lt;/span&gt;&lt;span class="n"&gt;output_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"neighborhoods.html"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'Neighborhoods with the most Black police killings'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# show in notebook
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The output &lt;code&gt;neighborhoods.html&lt;/code&gt; that was created should pop up in your browser and be saved in your directory. This is the file we'll use to embed the plot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embed the plot
&lt;/h2&gt;

&lt;p&gt;I believe there are different ways you can embed &lt;code&gt;Bokeh&lt;/code&gt; plots to websites, but the approach I took since I found it the simplest was to host the created &lt;code&gt;neighborhoods.html&lt;/code&gt; on my site (you can visit it &lt;a href="https://isabella-b.com/today-i-learned-posts/bokeh-plots-embed/neighborhoods.html"&gt;here&lt;/a&gt;), then use that as the source of the &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; to embed the plot.&lt;/p&gt;

&lt;p&gt;Steps: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Host the HTML file somewhere like GitHub pages (free) or your another site of yours.&lt;/li&gt;
&lt;li&gt;Copy its path and plug it into the &lt;code&gt;src&lt;/code&gt; of an &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; tag:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;iframe&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/today-i-learned-posts/bokeh-plots-embed/neighborhoods.html"&lt;/span&gt;
    &lt;span class="na"&gt;sandbox=&lt;/span&gt;&lt;span class="s"&gt;"allow-same-origin allow-scripts"&lt;/span&gt;
    &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"100%"&lt;/span&gt;
    &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"500"&lt;/span&gt;
    &lt;span class="na"&gt;scrolling=&lt;/span&gt;&lt;span class="s"&gt;"no"&lt;/span&gt;
    &lt;span class="na"&gt;seamless=&lt;/span&gt;&lt;span class="s"&gt;"seamless"&lt;/span&gt;
    &lt;span class="na"&gt;frameborder=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/iframe&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now you can use the &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; to embed your interactive &lt;code&gt;Bokeh&lt;/code&gt; visualization on any website! &lt;/p&gt;

&lt;p&gt;I hope you found this helpful. If you have any questions, feel free to comment below or &lt;a href="https://twitter.com/_isabellamb"&gt;tweet/DM me&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://isabella-b.com/today-i-learned-posts/bokeh-plots-embed/"&gt;Original blog post.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bokeh</category>
      <category>python</category>
      <category>datavisualization</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Scatter Plots on Mapbox with Plotly Express in Python &amp; How to Embed Them</title>
      <dc:creator>Isabella</dc:creator>
      <pubDate>Wed, 17 Jun 2020 19:50:12 +0000</pubDate>
      <link>https://dev.to/isabellabenabaye/scatter-plots-on-mapbox-with-plotly-express-in-python-how-to-embed-them-1l8m</link>
      <guid>https://dev.to/isabellabenabaye/scatter-plots-on-mapbox-with-plotly-express-in-python-how-to-embed-them-1l8m</guid>
      <description>&lt;p&gt;Last week I was exploring the Los Angeles Times' &lt;a href="https://github.com/datadesk/los-angeles-police-killings-data"&gt;database&lt;/a&gt; of police killings in L.A. County, trying to learn more about the Black and Latino communities that have been disproportionately affected by police violence based on data since 2000. I made a simple graphic about it that you can find in my &lt;a href="https://isabella-b.com/blog/los-angeles-police-killings"&gt;blog post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I also used that data to practice some EDA and data visualization in python. The data includes the latitude and longitude of where each person killed by police died, so one of the things I tried was mapping them with Mapbox and &lt;code&gt;plotly&lt;/code&gt; Express. This map shows the places of death of the people killed who were Black. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://isabella-b.com/today-i-learned-posts/plotly-mapbox-python-embed/"&gt;Live map&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ra3e56PV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yfpwwp19y8vafg7877ds.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ra3e56PV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yfpwwp19y8vafg7877ds.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To make this Mapbox map with Plotly you'll need a Mapbox account and a public Mapbox access token. This is easy to get, and the code to create the map is fairly simple. I will go through the whole process. &lt;/p&gt;

&lt;p&gt;First, import &lt;code&gt;plotly&lt;/code&gt; Express:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;plotly.express&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;px&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Next, you'll have to set your Mapbox access token and call it from a file in your directory called &lt;code&gt;.mapbox_token&lt;/code&gt; that contains your Mapbox access token. &lt;/p&gt;

&lt;p&gt;If you don't have one yet, to get a token you have to create a Mapbox account, go to &amp;gt; &lt;code&gt;Account&lt;/code&gt; &amp;gt; &lt;code&gt;+ Create a token&lt;/code&gt;, name your token, then &lt;code&gt;Create token&lt;/code&gt;. Copy the token and paste it to your &lt;code&gt;.mapbox_token&lt;/code&gt; file in your directory. &lt;/p&gt;

&lt;p&gt;Now we'll set it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;px&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_mapbox_access_token&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;".mapbox_token"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;To create the plot, use &lt;code&gt;px.scatter_mapbox()&lt;/code&gt;, and input your data frame and latitude &amp;amp; longitude fields to be used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;fig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;px&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scatter_mapbox&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_frame&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;black_killings&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lat&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'y'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lon&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'x'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="n"&gt;opacity&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="n"&gt;hover_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"full_name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="n"&gt;hover_data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"year"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"neighborhood"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"cause"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; 
  &lt;span class="n"&gt;zoom&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;update_layout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;margin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"r"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"t"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"l"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"b"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;  &lt;span class="c1"&gt;# remove the white gutter between the frame and map
&lt;/span&gt;        &lt;span class="c1"&gt;# hover appearance
&lt;/span&gt;        &lt;span class="n"&gt;hoverlabel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; 
        &lt;span class="n"&gt;bgcolor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"white"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="c1"&gt;# white background
&lt;/span&gt;        &lt;span class="n"&gt;font_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;# label font size
&lt;/span&gt;        &lt;span class="n"&gt;font_family&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Inter"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# label font
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Optional settings:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;opacity&lt;/code&gt; - the opacity of the dots&lt;br&gt;&lt;br&gt;
&lt;code&gt;hover_name&lt;/code&gt; - controls which column is displayed in bold as the tooltip title&lt;br&gt;&lt;br&gt;
&lt;code&gt;hover_data&lt;/code&gt; - list of columns whose values will be displayed in the body of the tooltip&lt;br&gt;
&lt;code&gt;zoom&lt;/code&gt; - set the map's initial zoom level&lt;/p&gt;

&lt;p&gt;The details of &lt;code&gt;update_layout&lt;/code&gt; are commented above.&lt;/p&gt;
&lt;h2&gt;
  
  
  Embed the plot
&lt;/h2&gt;

&lt;p&gt;To embed a &lt;code&gt;plotly&lt;/code&gt; plot on a website, the easiest way if your data source is small, is by hosting it in &lt;code&gt;plotly&lt;/code&gt;'s Chart Studio then embedding its &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt;. Alternatively, you can generate an HTML file of the visualization, host it somewhere like GitHub pages (free) or your personal website, then call that page in the &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; to embed it. In this post I'll use the Chart Studio route, and it's applicable to any &lt;code&gt;plotly&lt;/code&gt; visualization you create. &lt;/p&gt;

&lt;p&gt;If you don't have the Chart Studio python package yet, you can install it using the package manager &lt;strong&gt;pip&lt;/strong&gt; in your &lt;u&gt;terminal&lt;/u&gt; with &lt;code&gt;pip install chart_studio&lt;/code&gt;. You will need a &lt;a href="https://chart-studio.plotly.com/feed/#/"&gt;&lt;code&gt;plotly&lt;/code&gt; Chart Studio&lt;/a&gt; account and your API key.&lt;/p&gt;

&lt;p&gt;To get your API key: Click your username in the top right &amp;gt; &lt;code&gt;Profile&lt;/code&gt; &amp;gt; &lt;code&gt;API Keys&lt;/code&gt; &amp;gt; &lt;code&gt;Regenerate Key&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now import &lt;code&gt;chart_studio&lt;/code&gt; and set your credentials:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;chart_studio&lt;/span&gt;
&lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'your-username'&lt;/span&gt; 
&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;''&lt;/span&gt; 
&lt;span class="n"&gt;chart_studio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_credentials_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Save your plot to your Chart Studio cloud account with &lt;code&gt;py.plot()&lt;/code&gt;. It creates a unique URL for your plot that &lt;code&gt;plotly&lt;/code&gt; uses in the &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; it generates that you will use to embed your visualization on a website.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;chart_studio.plotly&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;py&lt;/span&gt;
&lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;filename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'file-name'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auto_open&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Running that should open the plot in Chart Studio in your browser. In the bottom right there is an &lt;i class="fas fa-code"&gt;&lt;/i&gt; icon where &lt;code&gt;plotly&lt;/code&gt; provides the code to the &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; you can use. &lt;/p&gt;

&lt;p&gt;Now you can use the &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; to embed your interactive &lt;code&gt;plotly&lt;/code&gt; visualization on any website! &lt;/p&gt;

&lt;p&gt;I hope you found this helpful. If you have any questions, feel free to comment below or &lt;a href="https://twitter.com/_isabellamb"&gt;tweet/DM me&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>plotly</category>
      <category>python</category>
      <category>mapbox</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
