The curators of GHCN have added a lot of stations, but also dropped a lot. It is nice that they have added stations, but it can make it harder to see where change has happened. I’ve tried making one graph out of this and all you see is whatever is plotted on top. So here are two graphs and you can compare them and “visually integrate”.
Then these are the station that were in the baseline decades (used by both GISS and Hadley – 1950-1990) but that are gone now:
Here’s the same data stacked with “blue on top’ with the dots half the diameter and 1/2 transparent. Still not much purple showing…
That’s a whole lot of instrument change at altitude. These are the more volatile stations and the “missing” data in the present will be made up from other stations up to 1200 km away via the Reference Station Method in the traditional Grid Box Anomaly fabrication process. I have little confidence that can work to 1/2 C of perfection with historical data recorded in whole degrees C or F.
Here’s the same composite of dropped baseline blue stations over red 2018 “Now” stations, but with the cutoff altitude raised to 2000m. It generally looks to me like a drift down the Rockies, but not really enough visibility in the graphs to prove it. Details in the data ought to be examined.
Here’s the code that made the first graphs. Hopefully I’ve not got any stupid mistakes in it ;-) In the working code the SQL text is all on one line. I’ve added line breaks so you don’t need to scroll forever…
# -*- coding: utf-8 -*- import datetime import pandas as pd import numpy as np import matplotlib.pylab as plt import math import mysql.connector as mariadb print ("Just before the Try") try: mariadb_connection=mariadb.connect(user='chiefio',password='LetMeIn!',database='temps') print ("did the db assignment") cursor=mariadb_connection.cursor() print ("did the cursor thing") print ("stuff the SQL string") sql="SELECT I.latitude, I.coslong FROM invent4 AS I INNER JOIN temps4 as T on I.stnID=T.stnID WHERE I.stn_elev>1000 AND I.stn_elev<9000 AND year=2018 GROUP BY I.stnID;" print ("execute it") cursor.execute(sql) print ("back from the execute") plt.title("v4 Global Thermometer Above 1000 m 2018") plt.xlabel("Longitude") plt.ylabel("Latitude") plt.xlim(-180,180) plt.ylim(-90,90) stn=cursor.fetchall() data = np.array(list(stn)) xs = data.transpose() # or xs = data.T or xs = data[:,0] ys = data.transpose() print ("do the plot") plt.scatter(ys,xs,s=1,color='red',alpha=1) plt.show() plt.title("v4 Global Thermometer Above 1000 m 1950-1990 Gone Now") plt.xlabel("Longitude") plt.ylabel("Latitude") plt.xlim(-180,180) plt.ylim(-90,90) sql="SELECT I.latitude, I.coslong FROM invent4 AS I INNER JOIN temps4 as T on I.stnID=T.stnID WHERE I.stn_elev>1000 AND I.stn_elev<9000 AND year>1949 AND year<1991 AND I.stnID NOT IN (SELECT I.stnID FROM invent4 AS I INNER JOIN temps4 as T ON I.stnID=T.stnID WHERE year=2018)GROUP BY I.stnID;" cursor.execute(sql) stn=cursor.fetchall() data = np.array(list(stn)) xs = data.transpose() # or xs = data.T or xs = data[:,0] ys = data.transpose() plt.scatter(ys,xs,s=1,color='blue',alpha=0.5) plt.show() except: print ("This is the exception branch") finally: print ("All Done")
The other graph is essentially those two laid on top of each other by commenting out the first plt.show and with changed headings. Also the plt.scatter has the dot size made smaller with s=0.5 but I think that’s not enough to need posting all that text too. The 2000 m graphs just have the 1000 test changed to 2000.