matplotlibheatmapimshowlinegraph

Creating a 1D heat map from a line graph


Is it possible to create a 1D heat map from data in a line graph? i.e. I'd like the highest values in y to represent the warmer colours in a heat map. I've attached an example image of the heat map I'd like it to look like as well as data I currently have in the line graph.

1D heat map and graph example:

enter image description here

To get the heatmap in the image shown I used the following code in python with matplotlib.pyplot:

heatmap, xedges, yedges = np.histogram2d(x, y, bins=(np.linspace(0,length_track,length_track+1),1))
extent = [0, length_track+1, 0, 50]
plt.imshow(heatmap.T, extent=extent, origin='lower', cmap='jet',vmin=0,vmax=None)

But I believe this only works if the data is represented as a scatter plot.


Solution

  • If we assume that the data is equally spaced, one may use an imshow plot to recreate the plot from the question.

    import matplotlib.pyplot as plt
    import numpy as np; np.random.seed(1)
    plt.rcParams["figure.figsize"] = 5,2
    
    x = np.linspace(-3,3)
    y = np.cumsum(np.random.randn(50))+6
    
    fig, (ax,ax2) = plt.subplots(nrows=2, sharex=True)
    
    extent = [x[0]-(x[1]-x[0])/2., x[-1]+(x[1]-x[0])/2.,0,1]
    ax.imshow(y[np.newaxis,:], cmap="plasma", aspect="auto", extent=extent)
    ax.set_yticks([])
    ax.set_xlim(extent[0], extent[1])
    
    ax2.plot(x,y)
    
    plt.tight_layout()
    plt.show()
    

    enter image description here