Plot triple bar graph from a single column grouped by another column using pandas












0















This is my dataset.



          Country                 Type  Disaster Count
0 CHINA P REP Industrial Accident 415
1 CHINA P REP Transport Accident 231
2 CHINA P REP Flood 175
3 INDIA Transport Accident 425
4 INDIA Flood 206
5 INDIA Storm 121
6 UNITED STATES Storm 348
7 UNITED STATES Transport Accident 159
8 UNITED STATES Flood 92
9 PHILIPPINES Storm 249
10 PHILIPPINES Transport Accident 84
11 PHILIPPINES Flood 71
12 INDONESIA Transport Accident 136
13 INDONESIA Flood 110
14 INDONESIA Seismic Activity 77


I would like to make a triple bar chart and the label is based on the column 'Type'. I would also like to group the bar based on the column 'Country'.



I have tried using (with df as the DataFrame object of the pandas library),



df.groupby('Country').plot.bar()


but the result came out as multiple bar charts representing each group in the 'Country' column.



The expected output is similar to this:
Expected output of the graph. Drawn not to scale



What are the codes that I need to run in order to achieve this graph?










share|improve this question



























    0















    This is my dataset.



              Country                 Type  Disaster Count
    0 CHINA P REP Industrial Accident 415
    1 CHINA P REP Transport Accident 231
    2 CHINA P REP Flood 175
    3 INDIA Transport Accident 425
    4 INDIA Flood 206
    5 INDIA Storm 121
    6 UNITED STATES Storm 348
    7 UNITED STATES Transport Accident 159
    8 UNITED STATES Flood 92
    9 PHILIPPINES Storm 249
    10 PHILIPPINES Transport Accident 84
    11 PHILIPPINES Flood 71
    12 INDONESIA Transport Accident 136
    13 INDONESIA Flood 110
    14 INDONESIA Seismic Activity 77


    I would like to make a triple bar chart and the label is based on the column 'Type'. I would also like to group the bar based on the column 'Country'.



    I have tried using (with df as the DataFrame object of the pandas library),



    df.groupby('Country').plot.bar()


    but the result came out as multiple bar charts representing each group in the 'Country' column.



    The expected output is similar to this:
    Expected output of the graph. Drawn not to scale



    What are the codes that I need to run in order to achieve this graph?










    share|improve this question

























      0












      0








      0








      This is my dataset.



                Country                 Type  Disaster Count
      0 CHINA P REP Industrial Accident 415
      1 CHINA P REP Transport Accident 231
      2 CHINA P REP Flood 175
      3 INDIA Transport Accident 425
      4 INDIA Flood 206
      5 INDIA Storm 121
      6 UNITED STATES Storm 348
      7 UNITED STATES Transport Accident 159
      8 UNITED STATES Flood 92
      9 PHILIPPINES Storm 249
      10 PHILIPPINES Transport Accident 84
      11 PHILIPPINES Flood 71
      12 INDONESIA Transport Accident 136
      13 INDONESIA Flood 110
      14 INDONESIA Seismic Activity 77


      I would like to make a triple bar chart and the label is based on the column 'Type'. I would also like to group the bar based on the column 'Country'.



      I have tried using (with df as the DataFrame object of the pandas library),



      df.groupby('Country').plot.bar()


      but the result came out as multiple bar charts representing each group in the 'Country' column.



      The expected output is similar to this:
      Expected output of the graph. Drawn not to scale



      What are the codes that I need to run in order to achieve this graph?










      share|improve this question














      This is my dataset.



                Country                 Type  Disaster Count
      0 CHINA P REP Industrial Accident 415
      1 CHINA P REP Transport Accident 231
      2 CHINA P REP Flood 175
      3 INDIA Transport Accident 425
      4 INDIA Flood 206
      5 INDIA Storm 121
      6 UNITED STATES Storm 348
      7 UNITED STATES Transport Accident 159
      8 UNITED STATES Flood 92
      9 PHILIPPINES Storm 249
      10 PHILIPPINES Transport Accident 84
      11 PHILIPPINES Flood 71
      12 INDONESIA Transport Accident 136
      13 INDONESIA Flood 110
      14 INDONESIA Seismic Activity 77


      I would like to make a triple bar chart and the label is based on the column 'Type'. I would also like to group the bar based on the column 'Country'.



      I have tried using (with df as the DataFrame object of the pandas library),



      df.groupby('Country').plot.bar()


      but the result came out as multiple bar charts representing each group in the 'Country' column.



      The expected output is similar to this:
      Expected output of the graph. Drawn not to scale



      What are the codes that I need to run in order to achieve this graph?







      python pandas






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Dec 30 '18 at 4:24









      raflie olwenraflie olwen

      119129




      119129
























          1 Answer
          1






          active

          oldest

          votes


















          1














          There are two ways -



          df.set_index('Country').pivot(columns='Type').plot.bar()


          enter image description here



          df.set_index(['Country','Type']).plot.bar()


          enter image description here






          share|improve this answer



















          • 1





            thanks to your answer, i find that setting the parameter of stacked = true to be more useful too

            – raflie olwen
            Dec 30 '18 at 6:32











          • @raflieolwen I am glad it helped :-)

            – Vivek Kalyanarangan
            Dec 30 '18 at 7:03











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53975272%2fplot-triple-bar-graph-from-a-single-column-grouped-by-another-column-using-panda%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          There are two ways -



          df.set_index('Country').pivot(columns='Type').plot.bar()


          enter image description here



          df.set_index(['Country','Type']).plot.bar()


          enter image description here






          share|improve this answer



















          • 1





            thanks to your answer, i find that setting the parameter of stacked = true to be more useful too

            – raflie olwen
            Dec 30 '18 at 6:32











          • @raflieolwen I am glad it helped :-)

            – Vivek Kalyanarangan
            Dec 30 '18 at 7:03
















          1














          There are two ways -



          df.set_index('Country').pivot(columns='Type').plot.bar()


          enter image description here



          df.set_index(['Country','Type']).plot.bar()


          enter image description here






          share|improve this answer



















          • 1





            thanks to your answer, i find that setting the parameter of stacked = true to be more useful too

            – raflie olwen
            Dec 30 '18 at 6:32











          • @raflieolwen I am glad it helped :-)

            – Vivek Kalyanarangan
            Dec 30 '18 at 7:03














          1












          1








          1







          There are two ways -



          df.set_index('Country').pivot(columns='Type').plot.bar()


          enter image description here



          df.set_index(['Country','Type']).plot.bar()


          enter image description here






          share|improve this answer













          There are two ways -



          df.set_index('Country').pivot(columns='Type').plot.bar()


          enter image description here



          df.set_index(['Country','Type']).plot.bar()


          enter image description here







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Dec 30 '18 at 5:51









          Vivek KalyanaranganVivek Kalyanarangan

          5,0361827




          5,0361827








          • 1





            thanks to your answer, i find that setting the parameter of stacked = true to be more useful too

            – raflie olwen
            Dec 30 '18 at 6:32











          • @raflieolwen I am glad it helped :-)

            – Vivek Kalyanarangan
            Dec 30 '18 at 7:03














          • 1





            thanks to your answer, i find that setting the parameter of stacked = true to be more useful too

            – raflie olwen
            Dec 30 '18 at 6:32











          • @raflieolwen I am glad it helped :-)

            – Vivek Kalyanarangan
            Dec 30 '18 at 7:03








          1




          1





          thanks to your answer, i find that setting the parameter of stacked = true to be more useful too

          – raflie olwen
          Dec 30 '18 at 6:32





          thanks to your answer, i find that setting the parameter of stacked = true to be more useful too

          – raflie olwen
          Dec 30 '18 at 6:32













          @raflieolwen I am glad it helped :-)

          – Vivek Kalyanarangan
          Dec 30 '18 at 7:03





          @raflieolwen I am glad it helped :-)

          – Vivek Kalyanarangan
          Dec 30 '18 at 7:03


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53975272%2fplot-triple-bar-graph-from-a-single-column-grouped-by-another-column-using-panda%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Monofisismo

          Angular Downloading a file using contenturl with Basic Authentication

          Olmecas