Matplotlib scatterplot; colour as a function of a third variable

前端 未结 3 913
遥遥无期
遥遥无期 2020-11-22 11:57

I want to make a scatterplot (using matplotlib) where the points are shaded according to a third variable. I\'ve got very close with this:

plt.scatter(w, M,          


        
相关标签:
3条回答
  • 2020-11-22 12:35

    There's no need to manually set the colors. Instead, specify a grayscale colormap...

    import numpy as np
    import matplotlib.pyplot as plt
    
    # Generate data...
    x = np.random.random(10)
    y = np.random.random(10)
    
    # Plot...
    plt.scatter(x, y, c=y, s=500)
    plt.gray()
    
    plt.show()
    

    enter image description here

    Or, if you'd prefer a wider range of colormaps, you can also specify the cmap kwarg to scatter. To use the reversed version of any of these, just specify the "_r" version of any of them. E.g. gray_r instead of gray. There are several different grayscale colormaps pre-made (e.g. gray, gist_yarg, binary, etc).

    import matplotlib.pyplot as plt
    import numpy as np
    
    # Generate data...
    x = np.random.random(10)
    y = np.random.random(10)
    
    plt.scatter(x, y, c=y, s=500, cmap='gray')
    plt.show()
    
    0 讨论(0)
  • 2020-11-22 12:45

    In matplotlib grey colors can be given as a string of a numerical value between 0-1.
    For example c = '0.1'

    Then you can convert your third variable in a value inside this range and to use it to color your points.
    In the following example I used the y position of the point as the value that determines the color:

    from matplotlib import pyplot as plt
    
    x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    y = [125, 32, 54, 253, 67, 87, 233, 56, 67]
    
    color = [str(item/255.) for item in y]
    
    plt.scatter(x, y, s=500, c=color)
    
    plt.show()
    

    enter image description here

    0 讨论(0)
  • 2020-11-22 12:47

    Sometimes you may need to plot color precisely based on the x-value case. For example, you may have a dataframe with 3 types of variables and some data points. And you want to do following,

    • Plot points corresponding to Physical variable 'A' in RED.
    • Plot points corresponding to Physical variable 'B' in BLUE.
    • Plot points corresponding to Physical variable 'C' in GREEN.

    In this case, you may have to write to short function to map the x-values to corresponding color names as a list and then pass on that list to the plt.scatter command.

    x=['A','B','B','C','A','B']
    y=[15,30,25,18,22,13]
    
    # Function to map the colors as a list from the input list of x variables
    def pltcolor(lst):
        cols=[]
        for l in lst:
            if l=='A':
                cols.append('red')
            elif l=='B':
                cols.append('blue')
            else:
                cols.append('green')
        return cols
    # Create the colors list using the function above
    cols=pltcolor(x)
    
    plt.scatter(x=x,y=y,s=500,c=cols) #Pass on the list created by the function here
    plt.grid(True)
    plt.show()
    

    0 讨论(0)
提交回复
热议问题