
这段代码使用Python的Pandas、Numpy、Matplotlib、Geopandas和Seaborn库,对全球OSA(睡眠呼吸暂停综合征)的分布和流行情况进行了可视化分析。代码分为两个主要部分:绘制世界地图展示OSA分布情况,以及绘制柱状图展示不同国家的OSA流行率。
数据读取与准备
代码首先从CSV文件中读取了两组数据:
figure2a.jsonfigure2b.csv绘制世界地图
world_map_plot函数负责绘制世界地图,展示OSA的分布情况:
geopandas.read_file读取地理数据文件。count列转换为有序分类变量,以便在地图上正确显示。cmap),使用YlGnBu颜色映射,并去除颜色映射的极端值。plt.subplot_mosaic创建一个复杂的布局,包含一个主地图和两个子地图。ax['a1'])上绘制全球OSA分布情况,并添加图例。ax['a2'])上绘制欧洲地区的放大图,并设置坐标轴范围。绘制柱状图
OSA_prevalence_countries函数负责绘制柱状图,展示不同国家的OSA流行率:
panel列将数据分为两组。seaborn.barplot绘制柱状图,分别表示轻度OSA(mod_OSA)和重度OSA(sev_OSA)的流行率。import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport geopandas as gpdimport seaborn as snsimport matplotlib as mplplt.style.use('nature.mplstyle')defworld_map_plot(): world = gpd.read_file('metadata/figure2a.json') world['count']= pd.Categorical(world['count'],ordered=True, categories=['<100','100-200','200-300','300-500','500-1000','1000-5000','5000+']) cmap = mpl.cm.YlGnBu(np.linspace(0,1,15)) cmap = mpl.colors.ListedColormap(cmap[2:-2,:-1]) fig, ax = plt.subplot_mosaic([['a1','a1','a1','a1'],['a1','a1','a1','a1'],['a2','a2','a3','a3']], figsize=(6,5)) world.plot(column='count', ax = ax['a1'], cmap = cmap, legend =True,edgecolor="#737373", linewidth=0.5, missing_kwds={'color':'#d9d9d9'}, legend_kwds={'loc':"lower left"}) world.plot(column='count', ax = ax['a2'], cmap = cmap, legend =False,edgecolor="#737373", linewidth=0.5, missing_kwds={'color':'#d9d9d9'}, legend_kwds={'loc':"lower left"}) ax['a2'].set_xlim(-15,35) ax['a2'].set_ylim(35,75) ax['a2'].spines.right.set_visible(False) ax['a2'].spines.top.set_visible(False) ax['a1'].spines.right.set_visible(False) ax['a1'].spines.top.set_visible(False) ax['a1'].spines.bottom.set_visible(False) ax['a1'].spines.left.set_visible(False) ax['a1'].tick_params(# changes apply to the x-axis which='both',# both major and minor ticks are affected bottom=False,# ticks along the bottom edge are off top=False,# ticks along the top edge are off left=False, labelleft=False, labelbottom=False) ax['a3'].spines.right.set_visible(False) ax['a3'].spines.top.set_visible(False) ax['a3'].spines.bottom.set_visible(False) ax['a3'].spines.left.set_visible(False) ax['a3'].tick_params(# changes apply to the x-axis which='both',# both major and minor ticks are affected bottom=False,# ticks along the bottom edge are off top=False,# ticks along the top edge are off left=False, labelleft=False, labelbottom=False) ax['a1'].axhline(y=0, color='k', alpha=0.1, linestyle='--') ax['a1'].axhline(y=30, color='k', alpha=0.1, linestyle='--') ax['a1'].axhline(y=-30, color='k', alpha=0.1, linestyle='--') plt.subplots_adjust(left =0.05, bottom =0.045, right =0.97, top =0.97, wspace =0, hspace =0) plt.show()world_map_plot()defOSA_prevalence_countries(): dfs = pd.read_csv('metadata/figure2b.csv') fig, axs= plt.subplots(1,2, figsize=(3.7,2.7))for n,ax inenumerate(axs): data = dfs.loc[dfs['panel']==n,:] ax = sns.barplot(x="mod_OSA",y="country", data=data,ax=ax, label="Total", color="#829cbc", legend=False) ax = sns.barplot(x="sev_OSA",y="country", data=data,ax=ax, color="#6290c8", legend=False) pos = ax.get_yticks() label= ax.get_yticklabels() ax.set_ylabel(' ') ax.set_yticks(pos, label) ax.spines.right.set_visible(False) ax.spines.bottom.set_visible(False) ax.tick_params(# changes apply to the x-axis which='both',# both major and minor ticks are affected bottom=False,# ticks along the bottom edge are off top=True,# ticks along the top edge are off labeltop=True, labelbottom=False, right=False, left=True, labelleft=True) ax.grid(axis='x', which='major') ax.set_xlabel('OSA prevalence, %') ax.xaxis.set_label_position('top') ax.set_xlim(None, right=0.35) plt.tight_layout() plt.show()OSA_prevalence_countries()
这段代码通过Python的Pandas、Numpy、Matplotlib、Geopandas和Seaborn库,对全球OSA的分布和流行情况进行了可视化分析。代码分为两个主要部分:绘制世界地图展示OSA分布情况,以及绘制柱状图展示不同国家的OSA流行率。
整体而言,这段代码提供了一个清晰的框架,用于展示全球OSA的分布和流行情况,有助于科学地评估OSA的全球影响。通过隐藏边框、刻度和添加网格线等操作,代码生成的图表简洁、美观且易于理解。
通过网盘分享的文件:211.python论文绘图
