0

I'm trying to plot a heatmap using Matplotlib, that shows measurements of hourly average CO2 (ppm) concentration of a room. Using plt.scatterplot I was able to get the following plot:

plt.scatterplot heatmap

The following code is working just fine for this simple heatmap plot:

import os
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

#  df=pd.read_excel("CO2.xlsx")

data = {'Fecha': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30], 'Hora': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], 'CO2': [547, 548, 543, 534, 521, 516, 519, 541, 788, 635, 758, 768, 811, 771, 711, 647, 590, 629, 629, 504, 442, 474, 489, 493, 494, 491, 486, 490, 490, 486, 487, 501, 640, 769, 539, 685, 617, 570, 531, 515, 570, 616, 625, 617, 527, 558, 566, 571, 572, 572, 569, 558, 536, 503, 464, 426, 400, 400, 400, 414, 417, 407, 402, 401, 400, 400, 400, 400, 402, 402, 401, 401, 404, 409, 409, 413, 405, 401, 400, 402, 405, 404, 405, 402, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 401, 401, 400, 401, 401, 400, 400, 400, 400, 416, 546, 528, 544, 500, 477, 480, 518, 499, 507, 466, 431, 414, 407, 424, 423, 429, 426, 409, 401, 400, 400, 400, 400, 428, 619, 694, 792, 1511, 924, 857, 593, 830, 783, 454, 481, 505, 527, 539, 547, 548, 542, 533, 519, 516, 519, 586, 765, 646, 789, 787, 800, 741, 688, 632, 587, 630, 623, 427, 460, 482, 493, 494, 492, 490, 486, 491, 489, 487, 483, 561, 787, 583, 624, 684, 562, 565, 498, 545, 602, 623, 624, 558, 548, 565, 567, 573, 572, 572, 561, 548, 516, 481, 440, 407, 400, 400, 403, 424, 410, 403, 401, 400, 400, 400, 400, 401, 402, 401, 401, 404, 408, 409, 411, 408, 402, 400, 401, 405, 403, 405, 402, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 401, 401, 400, 401, 401, 400, 400, 400, 400, 416, 546, 528, 544, 500, 477, 481, 519, 497, 509, 461, 431, 412, 408, 424, 423, 429, 426, 408, 401, 400, 400, 400, 400, 448, 632, 725, 1503, 904, 887, 587, 830, 785, 458, 480, 505, 526, 538, 547, 548, 542, 534, 519, 516, 519, 582, 767, 644, 789, 785, 801, 742, 689, 632, 587, 630, 625, 428, 459, 481, 493, 494, 492, 490, 486, 491, 489, 487, 483, 559, 784, 587, 621, 686, 563, 566, 498, 545, 600, 623, 624, 559, 547, 565, 567, 573, 572, 572, 561, 549, 517, 482, 440, 408, 400, 400, 403, 424, 410, 403, 401, 400, 400, 400, 400, 401, 402, 401, 401, 404, 408, 409, 411, 408, 402, 400, 401, 405, 403, 405, 402, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 401, 401, 400, 401, 401, 400, 400, 400, 400, 415, 545, 528, 545, 500, 478, 481, 518, 498, 509, 462, 431, 413, 408, 424, 423, 429, 426, 408, 401, 400, 400, 400, 400, 445, 631, 716, 1504, 885, 917, 580, 830, 786, 463, 479, 505, 526, 538, 546, 548, 542, 534, 519, 516, 519, 579, 769, 643, 790, 783, 802, 743, 690, 633, 587, 630, 626, 431, 458, 481, 493, 494, 492, 490, 486, 491, 489, 487, 484, 556, 781, 592, 618, 686, 564, 567, 498, 545, 599, 623, 624, 561, 546, 565, 567, 573, 572, 572, 562, 549, 517, 483, 441, 408, 400, 400, 403, 423, 410, 403, 401, 400, 400, 400, 400, 401, 402, 401, 401, 404, 408, 409, 411, 408, 402, 400, 401, 405, 403, 405, 402, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 401, 401, 400, 401, 401, 400, 400, 400, 400, 413, 544, 528, 546, 500, 478, 480, 518, 499, 508, 464, 432, 413, 407, 424, 423, 429, 426, 409, 401, 400, 400, 400, 400, 441, 630, 707, 1506, 866, 947, 573, 830, 787, 468, 478, 504, 526, 538, 547, 548, 542, 534, 520, 516, 519, 575, 771, 641, 791, 781, 803, 744, 690, 633, 588, 630, 626, 434, 458, 481, 493, 494, 492, 490, 486, 490, 489, 487, 484, 554, 778, 597, 615, 687, 565, 568, 498, 545, 598, 623, 624, 562, 546, 565, 567, 573, 572, 572, 562, 550, 518, 484, 441, 409, 400, 400, 403, 423, 410, 403, 401, 400, 400, 400, 400, 401, 402, 401, 401, 404, 408, 409, 411, 408, 402, 400, 401, 405, 403, 405, 402, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 401, 401, 400, 401, 401, 400, 400, 400, 400, 412, 544, 528, 547, 500, 478, 480, 518, 499, 507, 466, 431, 414, 407, 424, 423, 429, 426, 409, 401, 400, 400, 400, 400, 438, 628, 699, 1507, 855, 972, 567, 829, 788, 473, 477, 504, 525, 538, 547, 548, 542, 533, 520, 516, 519, 571, 772, 640, 791, 778, 803, 745, 691, 634, 588, 631]}
df = pd.DataFrame(data)

x=df.Fecha
y=df.Hora
colors=df.CO2
plt.scatter(x,y, c=colors, cmap="jet")
cbar=plt.colorbar(orientation="vertical")
cbar.set_label(label="CO2 (ppm)", size=10)
plt.yticks(np.arange(0, 25, 6))
plt.xticks(np.arange(0, 31, 6))
plt.xlabel("Día")
plt.ylabel("Hora")
plt.title('Concentración CO2: Reporte mensual')

plt.show()

The result is ok, but I would like the appearance of the heatmap to be closer to this:

this image is just an example of what I want to get using Matplotlib

This "smoothed" heatmap looks much better. I found some code that uses a Gaussian_filter to get this "smoothing" effect on a heatmap, but I have seen it only applied to a 2 variable scatterplot. I haven't found much information related to this CO2 calendar heatmap I am trying to build.

Could someone please guide me to what should I do to get something like this with the CO2 data? The following link has an Excel file with the data set I am using:

https://1drv.ms/x/s!Am6k-asTuDCLgUsBt2-wsJOcJ6-r?e=5vlvc2

Thanks!!

Trenton McKinney
  • 56,955
  • 33
  • 144
  • 158
Manuel
  • 1

0 Answers0