Matplotlib scatterplot; color as a function of a third variable Matplotlib scatterplot; color as a function of a third variable python python

Matplotlib scatterplot; color as a function of a third variable


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

import numpy as npimport 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 pltimport 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()


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 pltx = [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


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 variablesdef 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 abovecols=pltcolor(x)plt.scatter(x=x,y=y,s=500,c=cols) #Pass on the list created by the function hereplt.grid(True)plt.show()

Coloring scatter plot as a function of x variable