123 lines
3.6 KiB
Python
123 lines
3.6 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
#Cunren Liang, JPL/Caltech, 28-NOV-2016
|
||
|
|
||
|
#https://matplotlib.org/3.1.1/gallery/text_labels_and_annotations/date.html
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
import glob
|
||
|
import datetime
|
||
|
import argparse
|
||
|
import numpy as np
|
||
|
import matplotlib.pyplot as plt
|
||
|
import matplotlib.dates as mdates
|
||
|
|
||
|
|
||
|
def read_alosstack_baseline(baseline_file):
|
||
|
'''read baseline file generated by alosStack
|
||
|
'''
|
||
|
baseline_dict = {}
|
||
|
with open(baseline_file, 'r') as f:
|
||
|
lines = [line for line in f if line.strip() != '']
|
||
|
for x in lines[2:]:
|
||
|
blist = x.split()
|
||
|
#to fit into the format of other processors, all alos satellites are after 2000
|
||
|
#blist[0] = '20' + blist[0]
|
||
|
#blist[1] = '20' + blist[1]
|
||
|
baseline_dict[blist[1]] = float(blist[3])
|
||
|
baseline_dict[blist[0]] = 0
|
||
|
|
||
|
return baseline_dict
|
||
|
|
||
|
|
||
|
def cmdLineParse():
|
||
|
'''
|
||
|
Command line parser.
|
||
|
'''
|
||
|
parser = argparse.ArgumentParser(description='plot baselines')
|
||
|
parser.add_argument('-baseline', dest='baseline', type=str, required=True,
|
||
|
help = 'baseline file')
|
||
|
parser.add_argument('-pairs_dir', dest='pairs_dir', type=str, required=True,
|
||
|
help = 'pairs directory containing YYMMDD-YYMMDD folders. Only folders are recognized.')
|
||
|
parser.add_argument('-pairs_exc', dest='pairs_exc', type=str, nargs='+', default=None,
|
||
|
help = 'a number of pairs seperated by blanks. format: YYMMDD-YYMMDD YYMMDD-YYMMDD... If provided, these pairs will be excluded from plotting')
|
||
|
parser.add_argument('-output', dest='output', type=str, default='baseline.pdf',
|
||
|
help = 'output file name')
|
||
|
|
||
|
if len(sys.argv) <= 1:
|
||
|
print('')
|
||
|
parser.print_help()
|
||
|
sys.exit(1)
|
||
|
else:
|
||
|
return parser.parse_args()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
|
||
|
inps = cmdLineParse()
|
||
|
|
||
|
baseline = inps.baseline
|
||
|
pairs_dir = inps.pairs_dir
|
||
|
pairs_exc = inps.pairs_exc
|
||
|
output = inps.output
|
||
|
|
||
|
baseline_dict = read_alosstack_baseline(baseline)
|
||
|
pairs = [os.path.basename(x) for x in sorted(glob.glob(os.path.join(pairs_dir, '*-*'))) if os.path.isdir(x)]
|
||
|
if pairs_exc != None:
|
||
|
for x in pairs_exc:
|
||
|
if x in pairs:
|
||
|
pairs.remove(x)
|
||
|
|
||
|
#start plot
|
||
|
plt.rcParams['font.family'] = 'Times New Roman'
|
||
|
plt.rcParams['font.size'] = 12
|
||
|
fig, ax = plt.subplots()
|
||
|
|
||
|
time = [datetime.datetime.strptime(x, "%y%m%d") for x in baseline_dict]
|
||
|
baseline = [baseline_dict[x] for x in baseline_dict]
|
||
|
ax.plot(time, baseline, 'o', alpha=0.7, c='g')
|
||
|
|
||
|
year_min = datetime.datetime(min(time).year, 1, 1)
|
||
|
year_max = datetime.datetime(max(time).year+1, 1, 1)
|
||
|
|
||
|
for x in pairs:
|
||
|
rdate, sdate = x.split('-')
|
||
|
rtime = datetime.datetime.strptime(rdate, "%y%m%d")
|
||
|
stime = datetime.datetime.strptime(sdate, "%y%m%d")
|
||
|
time = [rtime, stime]
|
||
|
baseline = [baseline_dict[rdate], baseline_dict[sdate]]
|
||
|
ax.plot(time, baseline, '-', lw=.5, c='b')
|
||
|
|
||
|
ax.xaxis.set_major_locator(mdates.YearLocator())
|
||
|
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
|
||
|
ax.xaxis.set_minor_locator(mdates.MonthLocator())
|
||
|
|
||
|
ax.minorticks_on()
|
||
|
ax.tick_params('both', length=7, which='major', width=1)
|
||
|
ax.tick_params('both', length=4, which='minor', width=0.5)
|
||
|
ax.set_xlim(year_min, year_max)
|
||
|
|
||
|
ax.format_xdata = mdates.DateFormatter('%Y-%m-%d')
|
||
|
|
||
|
# rotates and right aligns the x labels, and moves the bottom of the
|
||
|
# axes up to make room for them
|
||
|
#fig.autofmt_xdate()
|
||
|
|
||
|
|
||
|
ax.set_xlabel('Time [years]')
|
||
|
ax.set_ylabel('Perpendicular Baseline [meters]')
|
||
|
|
||
|
|
||
|
plt.savefig(os.path.splitext(output)[0]+'.pdf')
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|