Argument dimensions are incompatible on matplotlib line chart












1















Trying to shade the area between two line chart but getting the following error




'argument dimensions are incompatible'




I have tried looking at similar questions but cannot seem to get a solution that works in my case.



df['Date'] = pd.DatetimeIndex(df['Date']).year
df = df[df['Date'] != 2015]
df_min = df[df['Element'] =='TMIN'].groupby('Date').aggregate({'Data_Value':np.average})
df_max = df[df['Element'] == 'TMAX'].groupby('Date').aggregate({'Data_Value':np.average})
n = np.array(len(df_min))
x = np.linspace(0,n,n,endpoint=True)
plt.plot(df_max, '-o',df_min,'-o')
plt.fill_between(x,df_min,df_max, color='grey',alpha='0.5')
plt.show()


Link to the database I am referring to : Database










share|improve this question

























  • Did you check whether the shapes of x, df_min, and df_max are identical?

    – cheersmate
    Jan 2 at 7:46













  • @cheersmate df_min & df_max = (10,1), x is (10,)

    – Emm
    Jan 2 at 7:52
















1















Trying to shade the area between two line chart but getting the following error




'argument dimensions are incompatible'




I have tried looking at similar questions but cannot seem to get a solution that works in my case.



df['Date'] = pd.DatetimeIndex(df['Date']).year
df = df[df['Date'] != 2015]
df_min = df[df['Element'] =='TMIN'].groupby('Date').aggregate({'Data_Value':np.average})
df_max = df[df['Element'] == 'TMAX'].groupby('Date').aggregate({'Data_Value':np.average})
n = np.array(len(df_min))
x = np.linspace(0,n,n,endpoint=True)
plt.plot(df_max, '-o',df_min,'-o')
plt.fill_between(x,df_min,df_max, color='grey',alpha='0.5')
plt.show()


Link to the database I am referring to : Database










share|improve this question

























  • Did you check whether the shapes of x, df_min, and df_max are identical?

    – cheersmate
    Jan 2 at 7:46













  • @cheersmate df_min & df_max = (10,1), x is (10,)

    – Emm
    Jan 2 at 7:52














1












1








1








Trying to shade the area between two line chart but getting the following error




'argument dimensions are incompatible'




I have tried looking at similar questions but cannot seem to get a solution that works in my case.



df['Date'] = pd.DatetimeIndex(df['Date']).year
df = df[df['Date'] != 2015]
df_min = df[df['Element'] =='TMIN'].groupby('Date').aggregate({'Data_Value':np.average})
df_max = df[df['Element'] == 'TMAX'].groupby('Date').aggregate({'Data_Value':np.average})
n = np.array(len(df_min))
x = np.linspace(0,n,n,endpoint=True)
plt.plot(df_max, '-o',df_min,'-o')
plt.fill_between(x,df_min,df_max, color='grey',alpha='0.5')
plt.show()


Link to the database I am referring to : Database










share|improve this question
















Trying to shade the area between two line chart but getting the following error




'argument dimensions are incompatible'




I have tried looking at similar questions but cannot seem to get a solution that works in my case.



df['Date'] = pd.DatetimeIndex(df['Date']).year
df = df[df['Date'] != 2015]
df_min = df[df['Element'] =='TMIN'].groupby('Date').aggregate({'Data_Value':np.average})
df_max = df[df['Element'] == 'TMAX'].groupby('Date').aggregate({'Data_Value':np.average})
n = np.array(len(df_min))
x = np.linspace(0,n,n,endpoint=True)
plt.plot(df_max, '-o',df_min,'-o')
plt.fill_between(x,df_min,df_max, color='grey',alpha='0.5')
plt.show()


Link to the database I am referring to : Database







python matplotlib






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 2 at 8:53









Bazingaa

17k21330




17k21330










asked Jan 2 at 7:41









EmmEmm

1399




1399













  • Did you check whether the shapes of x, df_min, and df_max are identical?

    – cheersmate
    Jan 2 at 7:46













  • @cheersmate df_min & df_max = (10,1), x is (10,)

    – Emm
    Jan 2 at 7:52



















  • Did you check whether the shapes of x, df_min, and df_max are identical?

    – cheersmate
    Jan 2 at 7:46













  • @cheersmate df_min & df_max = (10,1), x is (10,)

    – Emm
    Jan 2 at 7:52

















Did you check whether the shapes of x, df_min, and df_max are identical?

– cheersmate
Jan 2 at 7:46







Did you check whether the shapes of x, df_min, and df_max are identical?

– cheersmate
Jan 2 at 7:46















@cheersmate df_min & df_max = (10,1), x is (10,)

– Emm
Jan 2 at 7:52





@cheersmate df_min & df_max = (10,1), x is (10,)

– Emm
Jan 2 at 7:52












1 Answer
1






active

oldest

votes


















2














There were two problems in your code:




  • Your x was basically an integer which has a length 0 whereas you needed to pass an array of values which corresponded to the x-scale range (years in your case) over which you want to fill.

  • Your df_min and df_max were DataFrames whereas what you should have passed are the y-values corresponding to df_min and df_max. These can be accessed using df_min.values and df_max.values. However, this is an array or arrays. You need to then flatten it to get a 1d array in order to use fill_between.


Following is one solution:



x = df_max.index.values

plt.plot(df_max, '-o',df_min,'-o')
plt.fill_between(x,df_min.values.flatten(),df_max.values.flatten(), color='grey',alpha='0.5')


enter image description here






share|improve this answer

























    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%2f54002829%2fargument-dimensions-are-incompatible-on-matplotlib-line-chart%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









    2














    There were two problems in your code:




    • Your x was basically an integer which has a length 0 whereas you needed to pass an array of values which corresponded to the x-scale range (years in your case) over which you want to fill.

    • Your df_min and df_max were DataFrames whereas what you should have passed are the y-values corresponding to df_min and df_max. These can be accessed using df_min.values and df_max.values. However, this is an array or arrays. You need to then flatten it to get a 1d array in order to use fill_between.


    Following is one solution:



    x = df_max.index.values

    plt.plot(df_max, '-o',df_min,'-o')
    plt.fill_between(x,df_min.values.flatten(),df_max.values.flatten(), color='grey',alpha='0.5')


    enter image description here






    share|improve this answer






























      2














      There were two problems in your code:




      • Your x was basically an integer which has a length 0 whereas you needed to pass an array of values which corresponded to the x-scale range (years in your case) over which you want to fill.

      • Your df_min and df_max were DataFrames whereas what you should have passed are the y-values corresponding to df_min and df_max. These can be accessed using df_min.values and df_max.values. However, this is an array or arrays. You need to then flatten it to get a 1d array in order to use fill_between.


      Following is one solution:



      x = df_max.index.values

      plt.plot(df_max, '-o',df_min,'-o')
      plt.fill_between(x,df_min.values.flatten(),df_max.values.flatten(), color='grey',alpha='0.5')


      enter image description here






      share|improve this answer




























        2












        2








        2







        There were two problems in your code:




        • Your x was basically an integer which has a length 0 whereas you needed to pass an array of values which corresponded to the x-scale range (years in your case) over which you want to fill.

        • Your df_min and df_max were DataFrames whereas what you should have passed are the y-values corresponding to df_min and df_max. These can be accessed using df_min.values and df_max.values. However, this is an array or arrays. You need to then flatten it to get a 1d array in order to use fill_between.


        Following is one solution:



        x = df_max.index.values

        plt.plot(df_max, '-o',df_min,'-o')
        plt.fill_between(x,df_min.values.flatten(),df_max.values.flatten(), color='grey',alpha='0.5')


        enter image description here






        share|improve this answer















        There were two problems in your code:




        • Your x was basically an integer which has a length 0 whereas you needed to pass an array of values which corresponded to the x-scale range (years in your case) over which you want to fill.

        • Your df_min and df_max were DataFrames whereas what you should have passed are the y-values corresponding to df_min and df_max. These can be accessed using df_min.values and df_max.values. However, this is an array or arrays. You need to then flatten it to get a 1d array in order to use fill_between.


        Following is one solution:



        x = df_max.index.values

        plt.plot(df_max, '-o',df_min,'-o')
        plt.fill_between(x,df_min.values.flatten(),df_max.values.flatten(), color='grey',alpha='0.5')


        enter image description here







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Jan 2 at 8:52

























        answered Jan 2 at 8:06









        BazingaaBazingaa

        17k21330




        17k21330
































            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%2f54002829%2fargument-dimensions-are-incompatible-on-matplotlib-line-chart%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

            MongoDB - Not Authorized To Execute Command

            How to fix TextFormField cause rebuild widget in Flutter

            in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith