Mal
Mal

Reputation: 55

python plot line with changing color depending on x-value

I am producing the probability distribution function of my variable, which is temperature:

enter image description here

and I am going to produce several plots with temperature PDF evolution. For this reason, I would like to link the color of the plot (rainbow-style) with the value of the peak of the temperature distribution. In this way, it is easy to associate the average value of the temperature just by looking at the color. Here's the code I have written for producing plots of the PDF evolution:

from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import seaborn as sns
from scipy.stats import gaussian_kde


my_file = 'tas/tas.nc'
fh = Dataset(my_file, mode='r')
lons = (fh.variables['rlon'][:])
lats = (fh.variables['rlat'][:])
t = (fh.variables['tas'][:])-273
step = len(t[:,0,0])

t_units = fh.variables['tas'].units
fh.close()

len_lon = len(t[0,0,:])
len_lat = len(t[0,:,0])
len_tot = len_lat*len_lon

temperature = np.zeros(len_tot)

for i in range(step):    
   temperature=t[i,:,:]
   temperature_array = temperature.ravel()

   density = gaussian_kde(temperature_array)
   xs = np.linspace(-80,50,200)
   density.covariance_factor = lambda : .25
   density._compute_covariance()

   plt.title(str(1999+i))
   plt.xlabel("Temperature (C)")
   plt.ylabel("Frequency")

   plt.plot(xs,density(xs))
   plt.savefig('temp_'+str(i))

Upvotes: 0

Views: 2524

Answers (1)

nostradamus
nostradamus

Reputation: 722

Because the question is lacking a working snippet, I had to come up with some sample data. This creates three datasets, where each one is colored with a specific color between blue (cold) and red (hot) according to their maximum value.

import matplotlib.pyplot as plt
import random
from colour import Color

nrange = 20
mydata1 = random.sample(range(nrange), 3)
mydata2 = random.sample(range(nrange), 3)
mydata3 = random.sample(range(nrange), 3)

colorlist = list(Color('blue').range_to(Color('red'), nrange))

# print(mydata1) print(mydata2) print(mydata3)

plt.plot(mydata1, color='{}'.format(colorlist[max(mydata1)]))
plt.plot(mydata2, color='{}'.format(colorlist[max(mydata2)]))
plt.plot(mydata3, color='{}'.format(colorlist[max(mydata3)]))
plt.show()

Upvotes: 1

Related Questions