|
- #!/usr/bin/env python3
-
- from argparse import ArgumentParser
-
- import numpy as np
- import pandas as pd
- import geopandas as gpd
- import contextily as cx
- import matplotlib.pyplot as plt
-
- import seaborn as sns
-
- sns.set()
- #sns.set(font_scale=1.5)
-
-
- if __name__ == "__main__":
- parser = ArgumentParser()
- parser.add_argument("-f", "--file", required=True, help="Messfahrt csv")
- parser.add_argument("-a", "--column", required=True, help="Column to plot")
- parser.add_argument("-l", "--label", help="Label above the plot.")
- parser.add_argument("--no_legend", action="store_false", default=True, help="Do not show legend.")
- parser.add_argument("--save", default=None, help="Location to save pdf file.")
-
- parser.add_argument(
- "--show_providerinfo",
- default=False,
- help="Show providerinfo for map tiles an zoom levels.",
- )
-
- args = parser.parse_args()
-
- df = pd.read_csv(args.file)
-
- gdf = gpd.GeoDataFrame(
- df,
- geometry=gpd.points_from_xy(df["longitude"], df["latitude"]),
- crs="EPSG:4326",
- )
-
- gdf["srtt"] = gdf["srtt"].apply(lambda x: x / 10 ** 6)
- gdf["is_retranmission"] = gdf["is_retranmission"].replace(True, np.NaN).dropna().astype(float)
-
- print("Start plotting...")
-
- df_wm = gdf.to_crs(epsg=3857)
- ax2 = df_wm.plot()
- ax2 = df_wm.plot(column=args.column, cmap="hot", legend=args.no_legend, ax=ax2, legend_kwds={"label": args.label},)
- # ax2 = df_wm.plot.scatter(x="longitude", y="latitude", c="kmh", cmap="hot")
- # zoom 17 is pretty
- cx.add_basemap(ax2, source=cx.providers.OpenStreetMap.Mapnik, zoom=17)
-
- # gdf.plot()
- ax2.set_axis_off()
- if not args.no_legend:
- ax2.set_title(args.label if args.label else args.column)
- else:
- fig = ax2.figure
- cb_ax = fig.axes[0]
- cb_ax.set_label(args.label)
- cb_ax.tick_params(labelsize=30)
-
- if args.show_providerinfo:
- #####################################
- # Identifying how many tiles
- latlon_outline = gdf.to_crs("epsg:4326").total_bounds
- def_zoom = cx.tile._calculate_zoom(*latlon_outline)
- print(f"Default Zoom level {def_zoom}")
-
- cx.howmany(*latlon_outline, def_zoom, ll=True)
- cx.howmany(*latlon_outline, def_zoom + 1, ll=True)
- cx.howmany(*latlon_outline, def_zoom + 2, ll=True)
-
- # Checking out some of the other providers and tiles
- print(cx.providers.CartoDB.Voyager)
- print(cx.providers.Stamen.TonerLite)
- print(cx.providers.Stamen.keys())
- #####################################
-
- # df.plot(x="longitude", y="latitude", kind="scatter", colormap="YlOrRd")
-
- if args.save:
- plt.savefig("{}gps_plot.eps".format(args.save), bbox_inches="tight")
- else:
- plt.show()
|