def test_declarative_upa_obs(): """Test making a full upperair observation plot.""" data = pd.read_csv(get_test_data('UPA_obs.csv', as_file_obj=False)) obs = PlotObs() obs.data = data obs.time = datetime(1993, 3, 14, 0) obs.level = 500 * units.hPa obs.fields = ['temperature', 'dewpoint', 'height'] obs.locations = ['NW', 'SW', 'NE'] obs.formats = [None, None, lambda v: format(v, '.0f')[:3]] obs.vector_field = ('u_wind', 'v_wind') obs.vector_field_length = 7 obs.reduce_points = 0 # Panel for plot with Map features panel = MapPanel() panel.layout = (1, 1, 1) panel.area = (-124, -72, 20, 53) panel.projection = 'lcc' panel.layers = ['coastline', 'borders', 'states', 'land'] panel.plots = [obs] # Bringing it all together pc = PanelContainer() pc.size = (15, 10) pc.panels = [panel] pc.draw() obs.level = 300 * units.hPa return pc.figure
def test_declarative_sfc_obs_changes(ccrs): """Test making a surface observation plot, changing the field.""" data = pd.read_csv(get_test_data('SFC_obs.csv', as_file_obj=False), infer_datetime_format=True, parse_dates=['valid']) obs = PlotObs() obs.data = data obs.time = datetime(1993, 3, 12, 12) obs.level = None obs.fields = ['tmpf'] obs.colors = ['black'] obs.time_window = timedelta(minutes=15) # Panel for plot with Map features panel = MapPanel() panel.layout = (1, 1, 1) panel.projection = ccrs.PlateCarree() panel.area = 'in' panel.layers = ['states'] panel.plots = [obs] panel.title = f'Surface Observations for {obs.time}' # Bringing it all together pc = PanelContainer() pc.size = (10, 10) pc.panels = [panel] pc.draw() obs.fields = ['dwpf'] obs.colors = ['green'] return pc.figure
def test_declarative_sfc_text(): """Test making a surface observation plot with text.""" data = pd.read_csv(get_test_data('SFC_obs.csv', as_file_obj=False), infer_datetime_format=True, parse_dates=['valid']) obs = PlotObs() obs.data = data obs.time = datetime(1993, 3, 12, 12) obs.time_window = timedelta(minutes=15) obs.level = None obs.fields = ['station'] obs.colors = ['black'] obs.formats = ['text'] # Panel for plot with Map features panel = MapPanel() panel.layout = (1, 1, 1) panel.projection = 'lcc' panel.area = 'in' panel.layers = ['states'] panel.plots = [obs] # Bringing it all together pc = PanelContainer() pc.size = (10, 10) pc.panels = [panel] pc.draw() return pc.figure
def test_plotobs_units_with_formatter(ccrs): """Test using PlotObs with a field that both has units and a custom formatter.""" df = pd.read_csv(get_test_data('SFC_obs.csv', as_file_obj=False), infer_datetime_format=True, parse_dates=['valid']) df.units = {'alti': 'inHg'} # Plot desired data obs = PlotObs() obs.data = df obs.time = datetime(1993, 3, 12, 12) obs.time_window = timedelta(minutes=15) obs.level = None obs.fields = ['alti'] obs.plot_units = ['hPa'] obs.locations = ['NE'] # Set a format for plotting MSLP obs.formats = [lambda v: format(v * 10, '.0f')[-3:]] obs.reduce_points = 0.75 # Panel for plot with Map features panel = MapPanel() panel.layout = (1, 1, 1) panel.projection = 'lcc' panel.area = 'in' panel.plots = [obs] # Bringing it all together pc = PanelContainer() pc.panels = [panel] pc.size = (10, 10) pc.draw() return pc.figure
def test_declarative_station_plot_fontsize(): """Test adjusting the font size for station plots in PlotObs.""" data = parse_metar_file(get_test_data('metar_20190701_1200.txt', as_file_obj=False), year=2019, month=7) obs = PlotObs() obs.data = data obs.time = datetime(2019, 7, 1, 12) obs.time_window = timedelta(minutes=15) obs.level = None obs.fields = ['cloud_coverage', 'air_temperature', 'dew_point_temperature', 'air_pressure_at_sea_level', 'current_wx1_symbol'] obs.plot_units = [None, 'degF', 'degF', None, None] obs.locations = ['C', 'NW', 'SW', 'NE', 'W'] obs.formats = ['sky_cover', None, None, lambda v: format(v * 10, '.0f')[-3:], 'current_weather'] obs.reduce_points = 3 obs.vector_field = ['eastward_wind', 'northward_wind'] obs.fontsize = 8 panel = MapPanel() panel.area = 'centus' panel.projection = 'lcc' panel.layers = ['coastline', 'borders', 'usstates'] panel.plots = [obs] pc = PanelContainer() pc.size = (8, 8) pc.panels = [panel] pc.draw() return pc.figure
def test_declarative_multiple_sfc_obs_change_units(ccrs): """Test making a surface observation plot.""" data = parse_metar_file(get_test_data('metar_20190701_1200.txt', as_file_obj=False), year=2019, month=7) obs = PlotObs() obs.data = data obs.time = datetime(2019, 7, 1, 12) obs.time_window = timedelta(minutes=15) obs.level = None obs.fields = ['air_temperature', 'dew_point_temperature', 'air_pressure_at_sea_level'] obs.locations = ['NW', 'W', 'NE'] obs.colors = ['red', 'green', 'black'] obs.reduce_points = 0.75 obs.plot_units = ['degF', 'degF', None] # Panel for plot with Map features panel = MapPanel() panel.layout = (1, 1, 1) panel.projection = ccrs.PlateCarree() panel.area = 'in' panel.layers = ['states'] panel.plots = [obs] # Bringing it all together pc = PanelContainer() pc.size = (12, 12) pc.panels = [panel] pc.draw() return pc.figure
def test_attribute_error_station(ccrs): """Make sure we get a useful error when the station variable is not found.""" data = pd.read_csv(get_test_data('SFC_obs.csv', as_file_obj=False), infer_datetime_format=True, parse_dates=['valid']) data.rename(columns={'station': 'location'}, inplace=True) obs = PlotObs() obs.data = data obs.time = datetime(1993, 3, 12, 12) obs.level = None obs.fields = ['tmpf'] obs.time_window = timedelta(minutes=15) # Panel for plot with Map features panel = MapPanel() panel.layout = (1, 1, 1) panel.projection = ccrs.PlateCarree() panel.area = 'in' panel.layers = ['states'] panel.plots = [obs] panel.title = f'Surface Observations for {obs.time}' # Bringing it all together pc = PanelContainer() pc.size = (10, 10) pc.panels = [panel] with pytest.raises(AttributeError): pc.draw()
def test_declarative_sfc_obs_full(ccrs): """Test making a full surface observation plot.""" data = pd.read_csv(get_test_data('SFC_obs.csv', as_file_obj=False), infer_datetime_format=True, parse_dates=['valid']) obs = PlotObs() obs.data = data obs.time = datetime(1993, 3, 12, 13) obs.time_window = timedelta(minutes=15) obs.level = None obs.fields = ['tmpf', 'dwpf', 'emsl', 'cloud_cover', 'wxsym'] obs.locations = ['NW', 'SW', 'NE', 'C', 'W'] obs.colors = ['red', 'green', 'black', 'black', 'blue'] obs.formats = [None, None, lambda v: format(10 * v, '.0f')[-3:], 'sky_cover', 'current_weather'] obs.vector_field = ('uwind', 'vwind') obs.reduce_points = 1 # Panel for plot with Map features panel = MapPanel() panel.layout = (1, 1, 1) panel.area = (-124, -72, 20, 53) panel.area = 'il' panel.projection = ccrs.PlateCarree() panel.layers = ['coastline', 'borders', 'states'] panel.plots = [obs] # Bringing it all together pc = PanelContainer() pc.size = (10, 10) pc.panels = [panel] pc.draw() return pc.figure
def test_declarative_colored_barbs(ccrs): """Test making a surface plot with a colored barb (gh-1274).""" data = pd.read_csv(get_test_data('SFC_obs.csv', as_file_obj=False), infer_datetime_format=True, parse_dates=['valid']) obs = PlotObs() obs.data = data obs.time = datetime(1993, 3, 12, 13) obs.level = None obs.vector_field = ('uwind', 'vwind') obs.vector_field_color = 'red' obs.reduce_points = .5 # Panel for plot with Map features panel = MapPanel() panel.layout = (1, 1, 1) panel.projection = ccrs.PlateCarree() panel.area = 'NE' panel.layers = ['states'] panel.plots = [obs] # Bringing it all together pc = PanelContainer() pc.size = (10, 10) pc.panels = [panel] pc.draw() return pc.figure
def test_plotobs_subset_time(sample_obs): """Test PlotObs subsetting for a particular time.""" obs = PlotObs() obs.data = sample_obs obs.level = None obs.time = datetime(2020, 8, 6, 13) truth = pd.DataFrame([('2020-08-06 13:00', 'KDEN', 500, 7, 15)], columns=['time', 'stid', 'pressure', 'temperature', 'dewpoint']) truth = truth.set_index(pd.to_datetime(truth['time'])) pd.testing.assert_frame_equal(obs.obsdata, truth)
def test_plotobs_subset_level_no_units(sample_obs): """Test PlotObs subsetting based on unitless level.""" obs = PlotObs() obs.data = sample_obs obs.level = 1000 truth = pd.DataFrame([('2020-08-06 13:00', 'KDEN', 1000, 5, 13), ('2020-08-06 12:59', 'KOKC', 1000, 6, 14)], columns=['time', 'stid', 'pressure', 'temperature', 'dewpoint'], index=[4, 5]) pd.testing.assert_frame_equal(obs.obsdata, truth)
def test_plotobs_subset_default_nolevel(sample_obs): """Test PlotObs subsetting with minimal config.""" obs = PlotObs() obs.data = sample_obs obs.level = None truth = pd.DataFrame( [('2020-08-06 13:00', 'KDEN', 500, 7, 15), ('2020-08-06 12:59', 'KOKC', 500, 8, 16)], columns=['time', 'stid', 'pressure', 'temperature', 'dewpoint'], index=[6, 7]) pd.testing.assert_frame_equal(obs.obsdata, truth)
def test_plotobs_subset_time_window_level(sample_obs): """Test PlotObs subsetting for a particular time with a window and a level.""" # Test also using an existing index sample_obs['time'] = pd.to_datetime(sample_obs['time']) sample_obs.set_index('time') obs = PlotObs() obs.data = sample_obs obs.level = 1000 * units.hPa obs.time = datetime(2020, 8, 5, 12) obs.time_window = timedelta(minutes=30) truth = pd.DataFrame([(datetime(2020, 8, 5, 12), 'KDEN', 1000, 1, 9), (datetime(2020, 8, 5, 12, 1), 'KOKC', 1000, 2, 10)], columns=['time', 'stid', 'pressure', 'temperature', 'dewpoint']) truth = truth.set_index('time') pd.testing.assert_frame_equal(obs.obsdata, truth)