Plot Interaction of Categorical Factors
=======================================


.. _categorical_interaction_plot_notebook:

`Link to Notebook GitHub <https://github.com/statsmodels/statsmodels/blob/master/examples/notebooks/categorical_interaction_plot.ipynb>`_

.. raw:: html

   
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <p>In this example, we will vizualize the interaction between categorical factors. First, we will create some categorical data are initialized. Then plotted using the interaction_plot function which internally recodes the x-factor categories to ingegers.</p>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">In&nbsp;[1]:</div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span>
   <span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
   <span class="kn">import</span> <span class="nn">pandas</span> <span class="kn">as</span> <span class="nn">pd</span>
   <span class="kn">from</span> <span class="nn">statsmodels.graphics.factorplots</span> <span class="kn">import</span> <span class="n">interaction_plot</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">In&nbsp;[2]:</div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="mi">12345</span><span class="p">)</span>
   <span class="n">weight</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">repeat</span><span class="p">([</span><span class="s1">&#39;low&#39;</span><span class="p">,</span> <span class="s1">&#39;hi&#39;</span><span class="p">,</span> <span class="s1">&#39;low&#39;</span><span class="p">,</span> <span class="s1">&#39;hi&#39;</span><span class="p">],</span> <span class="mi">15</span><span class="p">),</span> <span class="n">name</span><span class="o">=</span><span class="s1">&#39;weight&#39;</span><span class="p">)</span>
   <span class="n">nutrition</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">repeat</span><span class="p">([</span><span class="s1">&#39;lo_carb&#39;</span><span class="p">,</span> <span class="s1">&#39;hi_carb&#39;</span><span class="p">],</span> <span class="mi">30</span><span class="p">),</span> <span class="n">name</span><span class="o">=</span><span class="s1">&#39;nutrition&#39;</span><span class="p">)</span>
   <span class="n">days</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">30</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">60</span><span class="p">))</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">In&nbsp;[3]:</div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">))</span>
   <span class="n">fig</span> <span class="o">=</span> <span class="n">interaction_plot</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">weight</span><span class="p">,</span> <span class="n">trace</span><span class="o">=</span><span class="n">nutrition</span><span class="p">,</span> <span class="n">response</span><span class="o">=</span><span class="n">days</span><span class="p">,</span> 
                          <span class="n">colors</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;red&#39;</span><span class="p">,</span> <span class="s1">&#39;blue&#39;</span><span class="p">],</span> <span class="n">markers</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;D&#39;</span><span class="p">,</span> <span class="s1">&#39;^&#39;</span><span class="p">],</span> <span class="n">ms</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">)</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   <div class="output_wrapper">
   <div class="output">
   
   
   <div class="output_area"><div class="prompt"></div>
   
   
   <div class="output_png output_subarea ">
   <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYAAAAFMCAYAAADC7WtwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
   AAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xu81XPa//HXtduVjooiKruEMYZBQqm0RREiUmQybsw0
   mRkh6Xa4kcNoJoZ7GEwZ5+N0IEKF2DWqm4lKfqWhEooh7a1MEXX9/vis3ex2+7D2XofvWnu9n4/H
   erT2Wt/vWteOPtf3c/heH3N3REQk9+RFHYCIiERDCUBEJEcpAYiI5CglABGRHKUEICKSo/KjDiBe
   ZqblSiIiteDuVtHrWZMAANK5ZHXMmDGMGTMmbd8nIrkh3W2LWYVtP6AhIBGRnKUEICKSo5QAKlFY
   WBh1CCJSB2VS22LZUgrCzDxbYhURyRRmVjcmgUUku3Xo0IHVq1dHHUadVFBQwEcffVSjc9QDEJG0
   iV2NRh1GnVTZ321VPQDNAYiI5CglABGRHKUEICKSo5QARERylBKAiOSkxYsXM3369Erff/vtt7ns
   sssAmD17NvPnz9/+3vjx43n88cdTHmOqaRmoiOSkRYsWsWDBAvr167fTe1u3buWII47giCOOAKCo
   qIimTZvSrVs3AH71q1+lNdZU0TJQEUmbVC4DXb16Nf369aNHjx7MmzePdu3aMXXqVPr168cf//hH
   OnfuzFdffUWXLl344IMP6NSpE99++y1t27bl6quvZunSpaxYsYKVK1dSUFDAsGHDuP322/nzn/9M
   165dyc/Pp3Xr1tx99928+uqrNGvWjJEjR7Jo0SIuvvhiNm/eTKdOnXjwwQfZddddOe644zj66KN5
   /fXX+frrr3nggQfo3r17Sn530DJQEclxH374IZdccgnvvfceLVq0YMqUKTtVwzQz8vPzuemmmzj7
   7LN55513GDRoEADLli3jtdde44knnth+bEFBAcOHD+fyyy/nnXfe2akRP//887nttttYtGgRBx98
   MDfeeOP297Zu3cqbb77JnXfemZHVhZUARKTO6NixI4cccggAnTt3rvGdsaeddhoNGjSI+/gNGzbw
   9ddf06NHDyAkgzlz5mx//8wzzwTgiCOOyMg7oJUARKTOaNiw4fbn9erV44cffiA/P59t27YB8O23
   31Z5fpMmTWr8nVUNaZXGUxpLplECEJE6o6LGuEOHDixYsACASZMmbX+9WbNmbNiwIa7PrezY5s2b
   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
   OaCnmdUzs8bA0UD6aq6mScOG4eq/b99QTO7996OOSERyXUqHgMysO/AzYImZLQQcuAYoIMxMT3D3
   981sJvAusBWY4O5LUxlXVMzgpptg332hV69QWbRXr6ijEpFcpQ1hIjJrFgwZAnfcEe4bEMkFGgJK
   nUwdApIKHH88FBXBddeFXoH+TYiEFTVXXTWu1kki0fNzjRJAhA46KKwQmjYNLrgAkl3qWyTbTJky
   k3vv/Yxnnnk5kvM7duzIa6+9Vqtzkyne/QcSpQQQsTZtQk+gpAROOgmKqyttKFJHuTu33z6TjRvv
   4LbbZtT4Kj7R8zNNdaUnkkEJIAM0aQJTpsChh4atJletijoikfSbMmUmS5acBBhLlpxY46v4RM/P
   FNoSMgfVqwd33gm//jV07w5vvRV1RCLpU3r1vmlTXwA2bTqxRlfxiZ5f3pYtW7jsssto27Yt7dq1
   4/LLL+f777+v9rznnnuOww8/nF133ZX999+fl18OSejhhx/moIMOonnz5uy3335MmDBh+zmlwz3j
   xo1jr7324sILL9z+O40dO5bWrVuz77778uSTT9bqd6lSZUWCMu1BlhWDS8Tzz4etJp95JupIRJKr
   sn/HkyZN98aNZ5TbyGu6Q/nXKnvsfGzjxtN98uQZNYqvQ4cOPmvWLL/uuuu8W7duvm7dOl+3bp0f
   c8wxfv3111d57ptvvum77rqrz5o1y93d165d68uXL3f3sJvXqlWr3N19zpw53rhxY1+4cKG7uxcV
   FXl+fr5fffXVvmXLFv/222+3vzZq1CjfsmWLz54925s0aeL//Oc/a/x3i7aEzD4LFri3bet+xx3a
   alLqjor+HW/bts2PPvoyh23lGvXw+rZq/gEken5ZpQmgU6dOPmPGf5LHzJkzvUOHDlWe+6tf/cpH
   jhwZ1/cMGDDA77rrLncPCaBhw4a+ZcuW7e8XFRV5/fr1ffPmzdtfGzx4sN9yyy2VfmZtEoCGgDLU
   EUfAvHnwwANwySXaalLqrrJj9zuKbyw/0fN3OCO2ln7t2rXss88+218vKCjgs88+q/LcTz75hE6d
   OlX43vTp0+nWrRu77747LVu2ZPr06TtsCdm6dWvq16+/wzktW7Zkl1122SEGbQmZQ/bZB+bOheXL
   4YwzIM6tSUWyhpcbuy+vurH8RM+viJnRtm1bVq9evf21eLZjbN++PStWrNjp9S1btnDWWWcxevRo
   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
   "
   >
   </div>
   
   </div>
   
   </div>
   </div>
   
   </div>

   <script src="https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"type="text/javascript"></script>
   <script type="text/javascript">
   init_mathjax = function() {
       if (window.MathJax) {
           // MathJax loaded
           MathJax.Hub.Config({
               tex2jax: {
               // I'm not sure about the \( and \[ below. It messes with the
               // prompt, and I think it's an issue with the template. -SS
                   inlineMath: [ ['$','$'], ["\\(","\\)"] ],
                   displayMath: [ ['$$','$$'], ["\\[","\\]"] ]
               },
               displayAlign: 'left', // Change this to 'center' to center equations.
               "HTML-CSS": {
                   styles: {'.MathJax_Display': {"margin": 0}}
               }
           });
           MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
       }
   }
   init_mathjax();

   // since we have to load this in a ..raw:: directive we will add the css
   // after the fact
   function loadcssfile(filename){
       var fileref=document.createElement("link")
       fileref.setAttribute("rel", "stylesheet")
       fileref.setAttribute("type", "text/css")
       fileref.setAttribute("href", filename)

       document.getElementsByTagName("head")[0].appendChild(fileref)
   }
   // loadcssfile({{pathto("_static/nbviewer.pygments.css", 1) }})
   // loadcssfile({{pathto("_static/nbviewer.min.css", 1) }})
   loadcssfile("../../../_static/nbviewer.pygments.css")
   loadcssfile("../../../_static/ipython.min.css")
   </script>