scatter plot with different color2019 Community Moderator ElectionWhat is the difference between @staticmethod and @classmethod?Difference between append vs. extend list methods in PythonPrint in terminal with colors?Difference between __str__ and __repr__?How to put the legend out of the plotSave plot to image file instead of displaying it using Matplotlibset bin colors in 2d histogram (polyochromatic plots)How to make IPython notebook matplotlib plot inlineLimited color choice in matplotlib?How do I create a line plot in matplotlib with different colors along the line, dependent on categorical variables?

What's the "normal" opposite of flautando?

Latex does not go to next line

Should I take out a loan for a friend to invest on my behalf?

PTIJ: Should I kill my computer after installing software?

Filtering SOQL results with optional conditionals

NASA's RS-25 Engines shut down time

Recommendation letter by significant other if you worked with them professionally?

Is "history" a male-biased word ("his+story")?

How does one describe somebody who is bi-racial?

Reverse string, can I make it faster?

How to write ı (i without dot) character in pgf-pie

Definition of Statistic

Bash script should only kill those instances of another script's that it has launched

How to draw cubes in a 3 dimensional plane

How strictly should I take "Candidates must be local"?

Is it "Vierergruppe" or "Viergruppe", or is there a distinction?

Was Luke Skywalker the leader of the Rebel forces on Hoth?

Does this video of collapsing warehouse shelves show a real incident?

Database Backup for data and log files

Makefile strange variable substitution

Declaring and defining template, and specialising them

Word for a person who has no opinion about whether god exists

Does "Until when" sound natural for native speakers?

Accepted offer letter, position changed



scatter plot with different color



2019 Community Moderator ElectionWhat is the difference between @staticmethod and @classmethod?Difference between append vs. extend list methods in PythonPrint in terminal with colors?Difference between __str__ and __repr__?How to put the legend out of the plotSave plot to image file instead of displaying it using Matplotlibset bin colors in 2d histogram (polyochromatic plots)How to make IPython notebook matplotlib plot inlineLimited color choice in matplotlib?How do I create a line plot in matplotlib with different colors along the line, dependent on categorical variables?










1















I am new to matplotlib and trying to plot this liner regression with customized color for a specific independent variable:



colors=['red','blue','green','black']
X=array([[1000],[2000],[3000],[4500]]
y=array([[200000],[200000],[200000],[200000]]

plt.scatter(X, y, color = colors[0])
plt.plot(X, lin_reg.predict(X), color = 'blue')
plt.xlabel('X')
plt.ylabel('y')
plt.show()


I need to set the color to black when X==3000 so I am using np.where:



colors_z=(np.where(X==3000,colors[4],colors[0]))
plt.scatter(X, y, color = colors_z)


But I am getting color error. any Idea what I am doing wrong? Thanks










share|improve this question


























    1















    I am new to matplotlib and trying to plot this liner regression with customized color for a specific independent variable:



    colors=['red','blue','green','black']
    X=array([[1000],[2000],[3000],[4500]]
    y=array([[200000],[200000],[200000],[200000]]

    plt.scatter(X, y, color = colors[0])
    plt.plot(X, lin_reg.predict(X), color = 'blue')
    plt.xlabel('X')
    plt.ylabel('y')
    plt.show()


    I need to set the color to black when X==3000 so I am using np.where:



    colors_z=(np.where(X==3000,colors[4],colors[0]))
    plt.scatter(X, y, color = colors_z)


    But I am getting color error. any Idea what I am doing wrong? Thanks










    share|improve this question
























      1












      1








      1








      I am new to matplotlib and trying to plot this liner regression with customized color for a specific independent variable:



      colors=['red','blue','green','black']
      X=array([[1000],[2000],[3000],[4500]]
      y=array([[200000],[200000],[200000],[200000]]

      plt.scatter(X, y, color = colors[0])
      plt.plot(X, lin_reg.predict(X), color = 'blue')
      plt.xlabel('X')
      plt.ylabel('y')
      plt.show()


      I need to set the color to black when X==3000 so I am using np.where:



      colors_z=(np.where(X==3000,colors[4],colors[0]))
      plt.scatter(X, y, color = colors_z)


      But I am getting color error. any Idea what I am doing wrong? Thanks










      share|improve this question














      I am new to matplotlib and trying to plot this liner regression with customized color for a specific independent variable:



      colors=['red','blue','green','black']
      X=array([[1000],[2000],[3000],[4500]]
      y=array([[200000],[200000],[200000],[200000]]

      plt.scatter(X, y, color = colors[0])
      plt.plot(X, lin_reg.predict(X), color = 'blue')
      plt.xlabel('X')
      plt.ylabel('y')
      plt.show()


      I need to set the color to black when X==3000 so I am using np.where:



      colors_z=(np.where(X==3000,colors[4],colors[0]))
      plt.scatter(X, y, color = colors_z)


      But I am getting color error. any Idea what I am doing wrong? Thanks







      python matplotlib






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Mar 6 at 15:22









      user3570022user3570022

      164




      164






















          2 Answers
          2






          active

          oldest

          votes


















          1














          I think this does what you're looking for; using np.where is a bit overkill for this purpose:



          X = [1000, 2000, 3000, 4500]
          y = [200000, 3000, 200000, 200000]
          colors = list(map(lambda x: 'r' if x == 3000 else 'b', X))

          plt.scatter(X, y, color=colors)
          plt.xlabel('X')
          plt.ylabel('y')
          plt.show()





          share|improve this answer























          • Awesome. Thanks rgk. worked like a charm

            – user3570022
            Mar 6 at 15:51






          • 1





            You can also add a list comprehension to avoid lambda and map: colors = ['r' if x == 3000 else 'b' for x in X]

            – Bazingaa
            Mar 6 at 16:08


















          1














          You've set colors_z to include colors[4] but there are only 4 colors in the list colors. The index for colors_z should be out of range. I'd dump the np.where in favor of a simple if statement or ternary operator. Something like:



          # ternary operator example
          plt.scatter(x, y, color = [colors[3] if x == 3000 else colors[0] for i in x])


          Note that this will only work when x is exactly == 3000, but it doesn't throw a syntactical error on my console, so it should work in your regression.






          share|improve this answer










          New contributor




          Sam is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.















          • 1





            I like your approach because it's the cleanest and simplest to read. For the color argument, shouldn't it be a list like so color = [colors[3] if x == 3000 else colors[0] for x in X]?

            – Guimoute
            Mar 6 at 15:47











          • Because as of now, you evaluate if x == 3000 which is always false ([1000, 2000, 3000, 4500] != 3000) so you are stuck with a single color. You do want a list.

            – Guimoute
            Mar 6 at 15:53











          • Yeah that's probably better Guimote.

            – Sam
            Mar 6 at 16:09











          • That ran much nicer. Thanks!

            – Sam
            Mar 6 at 16:13










          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%2f55026530%2fscatter-plot-with-different-color%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          2 Answers
          2






          active

          oldest

          votes








          2 Answers
          2






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          I think this does what you're looking for; using np.where is a bit overkill for this purpose:



          X = [1000, 2000, 3000, 4500]
          y = [200000, 3000, 200000, 200000]
          colors = list(map(lambda x: 'r' if x == 3000 else 'b', X))

          plt.scatter(X, y, color=colors)
          plt.xlabel('X')
          plt.ylabel('y')
          plt.show()





          share|improve this answer























          • Awesome. Thanks rgk. worked like a charm

            – user3570022
            Mar 6 at 15:51






          • 1





            You can also add a list comprehension to avoid lambda and map: colors = ['r' if x == 3000 else 'b' for x in X]

            – Bazingaa
            Mar 6 at 16:08















          1














          I think this does what you're looking for; using np.where is a bit overkill for this purpose:



          X = [1000, 2000, 3000, 4500]
          y = [200000, 3000, 200000, 200000]
          colors = list(map(lambda x: 'r' if x == 3000 else 'b', X))

          plt.scatter(X, y, color=colors)
          plt.xlabel('X')
          plt.ylabel('y')
          plt.show()





          share|improve this answer























          • Awesome. Thanks rgk. worked like a charm

            – user3570022
            Mar 6 at 15:51






          • 1





            You can also add a list comprehension to avoid lambda and map: colors = ['r' if x == 3000 else 'b' for x in X]

            – Bazingaa
            Mar 6 at 16:08













          1












          1








          1







          I think this does what you're looking for; using np.where is a bit overkill for this purpose:



          X = [1000, 2000, 3000, 4500]
          y = [200000, 3000, 200000, 200000]
          colors = list(map(lambda x: 'r' if x == 3000 else 'b', X))

          plt.scatter(X, y, color=colors)
          plt.xlabel('X')
          plt.ylabel('y')
          plt.show()





          share|improve this answer













          I think this does what you're looking for; using np.where is a bit overkill for this purpose:



          X = [1000, 2000, 3000, 4500]
          y = [200000, 3000, 200000, 200000]
          colors = list(map(lambda x: 'r' if x == 3000 else 'b', X))

          plt.scatter(X, y, color=colors)
          plt.xlabel('X')
          plt.ylabel('y')
          plt.show()






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Mar 6 at 15:37









          rgkrgk

          38339




          38339












          • Awesome. Thanks rgk. worked like a charm

            – user3570022
            Mar 6 at 15:51






          • 1





            You can also add a list comprehension to avoid lambda and map: colors = ['r' if x == 3000 else 'b' for x in X]

            – Bazingaa
            Mar 6 at 16:08

















          • Awesome. Thanks rgk. worked like a charm

            – user3570022
            Mar 6 at 15:51






          • 1





            You can also add a list comprehension to avoid lambda and map: colors = ['r' if x == 3000 else 'b' for x in X]

            – Bazingaa
            Mar 6 at 16:08
















          Awesome. Thanks rgk. worked like a charm

          – user3570022
          Mar 6 at 15:51





          Awesome. Thanks rgk. worked like a charm

          – user3570022
          Mar 6 at 15:51




          1




          1





          You can also add a list comprehension to avoid lambda and map: colors = ['r' if x == 3000 else 'b' for x in X]

          – Bazingaa
          Mar 6 at 16:08





          You can also add a list comprehension to avoid lambda and map: colors = ['r' if x == 3000 else 'b' for x in X]

          – Bazingaa
          Mar 6 at 16:08













          1














          You've set colors_z to include colors[4] but there are only 4 colors in the list colors. The index for colors_z should be out of range. I'd dump the np.where in favor of a simple if statement or ternary operator. Something like:



          # ternary operator example
          plt.scatter(x, y, color = [colors[3] if x == 3000 else colors[0] for i in x])


          Note that this will only work when x is exactly == 3000, but it doesn't throw a syntactical error on my console, so it should work in your regression.






          share|improve this answer










          New contributor




          Sam is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.















          • 1





            I like your approach because it's the cleanest and simplest to read. For the color argument, shouldn't it be a list like so color = [colors[3] if x == 3000 else colors[0] for x in X]?

            – Guimoute
            Mar 6 at 15:47











          • Because as of now, you evaluate if x == 3000 which is always false ([1000, 2000, 3000, 4500] != 3000) so you are stuck with a single color. You do want a list.

            – Guimoute
            Mar 6 at 15:53











          • Yeah that's probably better Guimote.

            – Sam
            Mar 6 at 16:09











          • That ran much nicer. Thanks!

            – Sam
            Mar 6 at 16:13















          1














          You've set colors_z to include colors[4] but there are only 4 colors in the list colors. The index for colors_z should be out of range. I'd dump the np.where in favor of a simple if statement or ternary operator. Something like:



          # ternary operator example
          plt.scatter(x, y, color = [colors[3] if x == 3000 else colors[0] for i in x])


          Note that this will only work when x is exactly == 3000, but it doesn't throw a syntactical error on my console, so it should work in your regression.






          share|improve this answer










          New contributor




          Sam is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.















          • 1





            I like your approach because it's the cleanest and simplest to read. For the color argument, shouldn't it be a list like so color = [colors[3] if x == 3000 else colors[0] for x in X]?

            – Guimoute
            Mar 6 at 15:47











          • Because as of now, you evaluate if x == 3000 which is always false ([1000, 2000, 3000, 4500] != 3000) so you are stuck with a single color. You do want a list.

            – Guimoute
            Mar 6 at 15:53











          • Yeah that's probably better Guimote.

            – Sam
            Mar 6 at 16:09











          • That ran much nicer. Thanks!

            – Sam
            Mar 6 at 16:13













          1












          1








          1







          You've set colors_z to include colors[4] but there are only 4 colors in the list colors. The index for colors_z should be out of range. I'd dump the np.where in favor of a simple if statement or ternary operator. Something like:



          # ternary operator example
          plt.scatter(x, y, color = [colors[3] if x == 3000 else colors[0] for i in x])


          Note that this will only work when x is exactly == 3000, but it doesn't throw a syntactical error on my console, so it should work in your regression.






          share|improve this answer










          New contributor




          Sam is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.










          You've set colors_z to include colors[4] but there are only 4 colors in the list colors. The index for colors_z should be out of range. I'd dump the np.where in favor of a simple if statement or ternary operator. Something like:



          # ternary operator example
          plt.scatter(x, y, color = [colors[3] if x == 3000 else colors[0] for i in x])


          Note that this will only work when x is exactly == 3000, but it doesn't throw a syntactical error on my console, so it should work in your regression.







          share|improve this answer










          New contributor




          Sam is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.









          share|improve this answer



          share|improve this answer








          edited Mar 6 at 16:13





















          New contributor




          Sam is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.









          answered Mar 6 at 15:37









          SamSam

          917




          917




          New contributor




          Sam is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.





          New contributor





          Sam is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.






          Sam is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.







          • 1





            I like your approach because it's the cleanest and simplest to read. For the color argument, shouldn't it be a list like so color = [colors[3] if x == 3000 else colors[0] for x in X]?

            – Guimoute
            Mar 6 at 15:47











          • Because as of now, you evaluate if x == 3000 which is always false ([1000, 2000, 3000, 4500] != 3000) so you are stuck with a single color. You do want a list.

            – Guimoute
            Mar 6 at 15:53











          • Yeah that's probably better Guimote.

            – Sam
            Mar 6 at 16:09











          • That ran much nicer. Thanks!

            – Sam
            Mar 6 at 16:13












          • 1





            I like your approach because it's the cleanest and simplest to read. For the color argument, shouldn't it be a list like so color = [colors[3] if x == 3000 else colors[0] for x in X]?

            – Guimoute
            Mar 6 at 15:47











          • Because as of now, you evaluate if x == 3000 which is always false ([1000, 2000, 3000, 4500] != 3000) so you are stuck with a single color. You do want a list.

            – Guimoute
            Mar 6 at 15:53











          • Yeah that's probably better Guimote.

            – Sam
            Mar 6 at 16:09











          • That ran much nicer. Thanks!

            – Sam
            Mar 6 at 16:13







          1




          1





          I like your approach because it's the cleanest and simplest to read. For the color argument, shouldn't it be a list like so color = [colors[3] if x == 3000 else colors[0] for x in X]?

          – Guimoute
          Mar 6 at 15:47





          I like your approach because it's the cleanest and simplest to read. For the color argument, shouldn't it be a list like so color = [colors[3] if x == 3000 else colors[0] for x in X]?

          – Guimoute
          Mar 6 at 15:47













          Because as of now, you evaluate if x == 3000 which is always false ([1000, 2000, 3000, 4500] != 3000) so you are stuck with a single color. You do want a list.

          – Guimoute
          Mar 6 at 15:53





          Because as of now, you evaluate if x == 3000 which is always false ([1000, 2000, 3000, 4500] != 3000) so you are stuck with a single color. You do want a list.

          – Guimoute
          Mar 6 at 15:53













          Yeah that's probably better Guimote.

          – Sam
          Mar 6 at 16:09





          Yeah that's probably better Guimote.

          – Sam
          Mar 6 at 16:09













          That ran much nicer. Thanks!

          – Sam
          Mar 6 at 16:13





          That ran much nicer. Thanks!

          – Sam
          Mar 6 at 16:13

















          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%2f55026530%2fscatter-plot-with-different-color%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

          1928 у кіно

          Захаров Федір Захарович

          Ель Греко