我在自定义我的情节图例时遇到问题。我做了很多定制,但无法理解这一点。我希望符号(不是标签)在图例中等距。正如您在示例中看到的,图例中圆圈之间的空间随着圆圈变大而变小。有任何想法吗?此外,我如何还添加一个颜色条(除了大小),较小的圆圈为浅红色(例如),较大的圆圈为蓝色(例如)这是我目前的代码:
import pandas as pd
import matplotlib.pyplot as plt
from vega_datasets import data as vega_data
gap = pd.read_json(vega_data.gapminder.url)
df = gap.loc[gap['year'] == 2000]
fig, ax = plt.subplots(1, 1,figsize=[14,12])
ax=ax.scatter(df['life_expect'], df['fertility'],
s = df['pop']/100000,alpha=0.7, edgecolor="black",cmap="viridis")
plt.xlabel("X")
plt.ylabel("Y");
kw = dict(prop="sizes", num=6, color="lightgrey", markeredgecolor='black',markeredgewidth=2)
plt.legend(*ax.legend_elements(**kw),bbox_to_anchor=(1, 0),frameon=False,
loc="lower left",markerscale=1,ncol=1,borderpad=2,labelspacing=4,handletextpad=2)
plt.grid()
plt.show()
Run Code Online (Sandbox Code Playgroud)
我有许多坐标(大约 20000 个),我需要从许多 NetCDF 文件中提取数据,每个文件大约有 30000 个时间步长(未来的气候情景)。使用此处的解决方案效率不高,原因是每个 i,j 将“dsloc”转换为“dataframe”所花费的时间(请查看下面的代码)。** 可以从此处下载 NetCDF 文件示例**
import pandas as pd
import xarray as xr
import time
#Generate some coordinates
coords_data = [{'lat': 68.04, 'lon': 15.20, 'stid':1},
{'lat':67.96, 'lon': 14.95, 'stid': 2}]
crd= pd.DataFrame(coords_data)
lat = crd["lat"]
lon = crd["lon"]
stid=crd["stid"]
NC = xr.open_dataset(nc_file)
point_list = zip(lat,lon,stid)
start_time = time.time()
for i,j,id in point_list:
print(i,j)
dsloc = NC.sel(lat=i,lon=j,method='nearest')
print("--- %s seconds ---" % (time.time() - start_time))
DT=dsloc.to_dataframe()
DT.insert(loc=0,column="station",value=id)
DT.reset_index(inplace=True)
temp=temp.append(DT,sort=True)
print("--- …
Run Code Online (Sandbox Code Playgroud) 我有一个 NC 文件(时间、纬度、经度)从这里下载,我正在尝试提取多个站点的时间序列(纬度/经度点从这里下载)。所以我尝试用这种方式读取坐标并从 NC 文件中提取最接近的值:
import pandas as pd
import xarray as xr
nc_file = r"C:\Users\lab\Desktop\harvey\example.nc"
NC = xr.open_dataset(nc_file)
csv = r"C:\Users\lab\Desktop\harvey\stations.csv"
df = pd.read_csv(csv,delimiter=',')
Newdf = pd.DataFrame([])
# grid point lists
lat = df["Lat"]
lon = df["Lon"]
point_list = zip(lat,lon)
for i, j in point_list:
dsloc = NC.sel(lat=i,lon=j,method='nearest')
DT=dsloc.to_dataframe()
Newdf=Newdf.append(DT,sort=True)
Run Code Online (Sandbox Code Playgroud)
该代码工作正常并返回:
EVP lat lon
time
2019-01-01 19:00:00 0.0546 40.063 -88.313
2019-01-01 23:00:00 0.0049 40.063 -88.313
2019-01-01 19:00:00 0.0052 41.938 -93.688
2019-01-01 23:00:00 0.0029 41.938 -93.688 …
Run Code Online (Sandbox Code Playgroud)