以下的图来自 iMeta 期刊文章,使用此代码,请引用文章:
Yong-Xin Liu, Chun-Lin Shi, Tengfei Ma, Wubin Ding, Danyi Li, Tong Chen, Jingyuan Fu, Shuang-Jiang Liu. 2023. iMeta progress and acknowledgment of reviewers in 2022. iMeta 2: e89. https://doi.org/10.1002/imt2.89
大家可能偶尔需要画世界地图或中国地图,来展示不同国家的某些特征分布,比如全球不同国家的新冠感染人数,在中国地图中展示不同省、市的人数、足迹、访问量等。如果没有了解过,可能会觉得画地图很难,可了解后就会觉得其实也没那么难。这篇文章用实际例子来介绍如何用Python画出好看的世界地图或者中国地图,以及如何根据需求来个性化配色并添加文字。
如果想复现本教程的结果,可以从Github上面下载画图脚本所用到的所有数据(包括每个国家的下载量数据,和世界地图数据,以及画图的脚本):https://github.com/DingWB/folium_documentation。
提示: 在运行ipynb文件时,如果遇到“Notebook ** is not trusted”,就在jupyter notebook右上角点击“不可信”,然后更改为“可信”即可解决。
本教程是用Pyhton3中的jupyter notebook运行的,也可以将代码复制到pytho编辑器中运行。不会python的朋友,可以先下载安装anaconda,在anaconda中打开jupyter notebook,然后再在jupyter notebook中打开本教程所分享的plot_world_map.ipynb即可。
Python主页(https://www.python.org/downloads/windows/)下载安装包后即可安装Anaconda(以window电脑为例),安装网址(https://www.anaconda.com/),安装教程链接:Anaconda安装(过程详细)可以参考:https://blog.csdn.net/weixin_42855758/article/details/122795125
如何打开.ipynb文件看链接:使用Jupyter打开本地.ipynb文件(D盘,E盘或F盘) - 知乎 (zhihu.com)怎么用jupyter执行代码(https://www.python51.com/jc/73223.html) (还可以百度搜索:JupyterNotebook运行代码详细步骤)。
1、安装python包
#pip install folium #用来画世界地图; 去掉井号,在命令行中执行
#pip install pandas,geopandas #用来处理和读取世界地图数据(geojson),去掉井号,在命令行中执行
2、导入python包
import pandas as pd
import folium,branca,os
from folium.features import DivIcon
import geopandas
import matplotlib
import matplotlib.pylab as plt
import numpy as np
import branca.colormap as cm
3、读取数据
读取每个国家下载量数据
这里需要注意,国家会对每个出版的地图进行审核,台湾、香港和南海诸岛必须要要属于中国,所以,需要对原始数据进行处理,将台湾、香港、澳门的数据合并到中国。
读取的数据,包含两列:CountryName和Count,其中,CountryName是国家的名字,Count是每个国家的下载量,大家可以把Count替换为不同国家或者省、市的新冠确诊人数、死亡人数、访问量、人口、降水量等等。
df=pd.read_excel(os.path.expanduser("data.xlsx"))
#merge China main land, Hongkong, Taiwan and Macao.
df.loc[df.CountryName=='China','Count']= df.loc[df.CountryName.isin(['China','Hong Kong','Taiwan','Macao']),'Count'].sum()
df=df.loc[~ df.CountryName.isin(['Hong Kong','Taiwan','Macao'])]
#为了使数据中的国家名字与后面的地图数据中的国家名字匹配,需要将部分国家的名字替换为地图数据中的名字
df.CountryName.replace({'Iran, Islamic Republic of...':'Iran','Russian Federation':'Russia','Sri Lanka':'Srilanka','Venezuela, Bolivarian Republic of...':'Venezuela','The former Yugoslav Republic of Macedonia':'North Macedonia','Syrian Arab Republic':'Syria','Brunei Darussalam':'Brunei','Republic of Moldova':'Moldova','Congo, Democratic Republic':'Dem. Rep. Congo',"Lao People's Democratic Republic":'Laos','Libyan Arab Jamahiriya':'Libya','South Sudan':'S. Sudan','United Republic of Tanzania':'Tanzania','Bosnia and Herzegovina':'Bosnia And Herzegovina',"Korea,Democratic People'S Republic Of":'North Korea',},inplace=True)
print(df.CountryName.unique())
['China' 'United States' 'India' 'Germany' 'United Kingdom' 'Japan''Canada' 'Australia' 'South Korea' 'Netherlands' 'Singapore' 'France''Brazil' 'Spain' 'Mexico' 'Italy' 'Denmark' 'Switzerland' 'Sweden''Pakistan' 'Russia' 'Ireland' 'Israel' 'Belgium' 'Thailand' 'Turkey''Norway' 'South Africa' 'Poland' 'Chile' 'Colombia' 'Finland' 'Malaysia''Austria' 'Philippines' 'Greece' 'Portugal' 'Indonesia' 'Iran' 'Egypt''Czech Republic' 'Argentina' 'New Zealand' 'United Arab Emirates''Ethiopia' 'Nigeria' 'Saudi Arabia' 'Kenya' 'Ukraine' 'Estonia' 'Morocco''Peru' 'Viet Nam' 'Bangladesh' 'Ecuador' 'Croatia' 'Hungary' 'Luxembourg''Romania' 'Unknown' 'Algeria' 'Ghana' 'Panama' 'Puerto Rico' 'Uruguay''Cyprus' 'Iraq' 'Serbia' 'Dominican Republic' 'Venezuela' 'Uganda''Slovakia' 'Slovenia' 'Lithuania' "Cote d'Ivoire'" 'Georgia' 'Kuwait''Kazakhstan' 'Zimbabwe' 'Tanzania' 'Iceland' 'Tunisia' 'Srilanka''Jordan' 'Qatar' 'Nepal' 'Benin' 'Seychelles' 'Yemen' 'North Macedonia''Lebanon' 'Paraguay' 'Sudan' 'Jamaica' 'Trinidad and Tobago' 'Costa Rica''Botswana' 'Bulgaria' 'Namibia' 'Malta' 'Oman''Palestinian Territory, Occupied' 'Senegal' 'Bolivia' 'Dem. Rep. Congo''Bahrain' 'Myanmar' 'Reunion' 'Guatemala' 'Zambia' 'Syria' 'Martinique''New Caledonia' 'Malawi' 'Latvia' 'Bosnia And Herzegovina' 'Honduras''Cameroon' 'Mongolia' 'Cuba' 'Nicaragua' 'Mauritius' 'Maldives' 'Brunei''Uzbekistan' 'Moldova' 'Armenia' 'Eritrea' 'Montenegro' 'Libya''French Guiana' 'Sierra Leone' 'Gabon' 'Liechtenstein' 'Togo' 'Belize''Belarus' 'Laos' 'Bhutan' 'Mozambique' 'Bahamas' 'Albania' 'Angola''Barbados' 'Fiji' 'Guadeloupe' 'Burkina Faso' 'Papua New Guinea''Vanuatu' 'Rwanda' 'Falkland Islands (Malvinas)' 'Madagascar' 'Andorra''Cape Verde' 'S. Sudan' 'Cambodia' 'Kyrgyzstan''EUROPE - UNKNOWN COUNTRY' 'El Salvador' 'Greenland' 'Aruba' 'Guinea']
读取世界地图数据
这里,使用geopandas读取中科院全球国家行政边界数据,
地图数据下载网址:中国科学院地理科学与资源研究所,链接https://www.resdc.cn/Default.aspx,选择【全球100万基础地理数据】分类下面的【全球国家行政边界数据】下载解压,也可以直接从前面分享的github链接获取地图数据。
需要注意的是,从其它地方下载的世界地图(大多来自西方国家),西藏的边界线是有问题的,跟国家官方给的边界线不一致,如果用那些数据来画图,审核肯定无法通过。还有台湾、钓鱼岛和南海诸岛,也存在问题。所以,我们最后使用的是中科院提供的世界地图数据来画图。
如果需要画中国地图,比如不同省、市的分布,可以将这里的世界地图数据替换为中国地图即可(一般是geojson格式的地图数据,也可以在上面中科院官网下载中国地图数据)。
# Read the geopandas dataset
data = geopandas.read_file("世界国家.shp")
data.crs="epsg:4326"
data.to_crs(crs="epsg:3857")
data.to_file('World.geojson', driver='GeoJSON')
#国家名字每个单词首字母大写
data.NAME=data.NAME.apply(lambda x:x.title() if not pd.isna(x) else np.nan)
data.NAME.replace({'Russian Federation':'Russia','Cote D¡¯Ivoire':"Cote D'Ivoire'","Korea,Democratic People'S Republic Of":'North Korea','Macedonia,The Former Yugoslav Republic Of':'North Macedonia','Syrian Arab Republic':'Syria','Korea, Republic Of':'South Korea','Congo,The Democratic Republic Of The':'Dem. Rep. Congo','United States of America':'United States'},inplace=True)
#讲下载量数据中的国家名字也做同样的处理
df.CountryName=df.CountryName.apply(lambda x:x.title() if not pd.isna(x) else np.nan)
#把两个数据框拼接起来,拼接后的数据框,既包含世界地图坐标数据,也包含我们需要展示的数据(下载量)
data = data.merge(df, how="left", left_on=['NAME'], right_on=['CountryName'])
print(data.NAME.unique())
data.drop('geometry',axis=1).head()
#geometry这一列包含每个国家的坐标和边界信息,非常庞大,所以就不展示geometry这一列了
[nan 'Greenland' 'Canada' 'United States' 'Saint Pierre And Miquelon''Bermuda' 'Bahamas' 'Turks And Caicos Islands' 'Cuba' 'Mexico''Cayman Islands' 'Haiti' 'Puerto Rico' 'Virgin Islands,British''Dominican Republic' 'Virgin Islands,U.S.' 'Anguilla' 'Jamaica''Saint Kitts And Nevis' 'Antigua And Barbuda' 'Montserrat' 'Belize''Guadeloupe' 'Guatemala' 'Dominica' 'Martinique' 'Nicaragua''Saint Lucia' 'El Salvador' 'Honduras' 'Barbados''Saint Vincent And The Grenadines' 'Aruba' 'Colombia' 'Grenada''Netherlands Antilles' 'Trinidad And Tobago' 'Costa Rica' 'France''Panama' 'Marshall Islands' 'Palau' 'Kiribati' 'Nauru' 'Solomon Islands''Papua New Guinea' 'Cook Islands' 'American Samoa' 'Australia' 'Vanuatu''Fiji' 'Tonga' 'Niue' 'New Caledonia' 'Pitcairn' 'Norfolk Island''Heard Island And Mcdonald Islands' 'Bouvet Island''Northern Mariana Islands' 'Antarctica''South Georgia And The South Sandwich Islands' 'Tuvalu' 'Tokelau''French Polynesia' 'French Southern Territories' 'Samoa''Micronesia,Federated States Of' 'Wallis And Futuna''Cocos(Keeling) Islands' 'Prince Edward Island' 'New Zealand''Wake Island' 'Algeria' 'Tunisia' 'Libya' 'Morocco' 'Egypt''Western Sahara' 'Mali' 'Mauritania' 'Niger' 'Sudan' 'Senegal''Cape Verde' 'Ethiopia' 'Gambia' 'Burkina Faso' 'Eritrea' 'Guinea-Bissau''Djibouti' 'Guinea' 'Chad' 'Nigeria' "Cote D'Ivoire'"'Central African Republic' 'Ghana' 'Sierra Leone' 'Benin' 'Togo''Liberia' 'Cameroon' 'Uganda' 'Equatorial Guinea' 'Congo''Sao Tome And Principe' 'Gabon' 'Somalia' 'Rwanda' 'Kenya''Dem. Rep. Congo' 'Burundi' 'Tanzania' 'Angola' 'Seychelles' 'Malawi''Mayotte' 'Zambia' 'Madagascar' 'Mozambique' 'Mauritius' 'Zimbabwe''Reunion' 'Namibia' 'Botswana' 'Swaziland' 'Lesotho' 'South Africa''Saint Helena' 'Comoros' 'Canarias' 'Madeira' 'Venezuela' 'Guyana''Suriname' 'French Guiana' 'Ecuador' 'Brazil' 'Bolivia' 'Peru' 'Paraguay''Argentina' 'Uruguay' 'Chile' 'Falkland Islands(Malvinas)''Svalbard And Jan Mayen' 'Russia' 'Sweden' 'Iceland' 'Norway''Faroe Islands' 'Finland' 'United Kingdom' 'Estonia' 'Latvia' 'Lithuania''Denmark' 'Belarus' 'Germany' 'Netherlands' 'Poland' 'Ireland' 'Belgium''Luxembourg' 'Czech Republic' 'Slovakia' 'Moldova' 'Austria' 'Hungary''Switzerland' 'Liechtenstein' 'Slovenia' 'Romania' 'Serbia' 'Ukraine''Bosnia And Herzegovina' 'Croatia' 'San Marino' 'Monaco' 'Italy''Bulgaria' 'Andorra' 'North Macedonia' 'Montenegro' 'Vatican' 'Albania''Greece' 'Gibraltar' 'Malta' 'Portugal' 'Spain' 'Turkmenistan''Kyrgyzstan' 'Armenia' 'Syria' 'Lebanon' 'Afghanistan' 'Iraq' 'Kuwait''Nepal' 'Bhutan' 'Laos' 'Maldives' 'Brunei' 'East Timor''Christmas Island' 'Mongolia' 'Caspian Sea' 'Jordan' 'Bahrain' 'Qatar''Georgia' 'Israel' 'Cyprus' 'Iran' 'Pakistan' 'Azerbaijan' 'Yemen''Bangladesh' 'Singapore' 'Kazakhstan' 'Area Under Dispute' 'Cambodia''Srilanka' 'British Indian Ocean Territory' 'Tajikistan' 'Saudi Arabia''Myanmar' 'Japan' 'South Korea' 'United Arab Emirates' 'Malaysia' 'India''Indonesia' 'Philippines' 'Oman' 'Thailand' 'Uzbekistan' 'Turkey''North Korea' 'Viet Nam' 'China']
OBJECTID | NAME | FENAME | FCNAME | SOC | POP | ELEMID | SHAPE_LENG | SHAPE_AREA | ID1 | CountryName | Count | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | NaN | None | None | None | 0.0 | 0 | 154.008856 | 27.507542 | 1 | NaN | NaN |
1 | 2 | Greenland | Greenland | ¸ñÁêÀ¼ | GRL | 6.0 | 1 | 1359.592591 | 662.855357 | 2 | Greenland | 1.0 |
2 | 3 | Canada | Canada | ¼ÓÄôó | CAN | 3166.0 | 2 | 3635.736641 | 1692.808594 | 3 | Canada | 1763.0 |
3 | 4 | United States | United States Of America | ÃÀ¹ú | USA | 28837.0 | 3 | 1261.087368 | 1100.995648 | 4 | United States | 15479.0 |
4 | 5 | Saint Pierre And Miquelon | Saint Pierre and Miquelon | ʥƤ°£¶ûºÍÃÜ¿Ë¡ | SPM | 1.0 | 4 | 1.725672 | 0.026938 | 5 | NaN | NaN |
将无法匹配的国家名字打印出来,如果有需要,可以向上面df.CountryName.replace中添加字典键值对来匹配
df.loc[~ df.CountryName.isin(data.NAME.tolist())].CountryName.values
array(['Unknown', 'Palestinian Territory, Occupied','Falkland Islands (Malvinas)', 'S. Sudan','Europe - Unknown Country'], dtype=object)
4、画世界地图
folium.Map的主要参数信息如下:
location:设定地图中心点
width, height:将地图的宽度和高度进行缩放
tiles:地图瓦片,参考https://leaflet-extras.github.io/leaflet-providers/preview/ 和 https://juejin.cn/post/7116708374279880734
# Create a map
my_map = folium.Map(title="World Map",location=(50,5),max_zoom=1,control_scale=True,zoom_control=False,width='80%',height='90%',zoom_start=2.49,#tiles='Stamen Terrain', #Stamen Watercolor# titles="http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunityENG/MapServer/tile/{z}/{y}/{x}",tiles=folium.TileLayer('https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={apikey}',attr='© <a href="http://www.thunderforest.com/">Thunderforest</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',apikey='pk.eyJ1IjoiZGluZ3diIiwiYSI6ImNsY3doNmluazBmd2Qzb29lbzVrYXltdjYifQ.H8sWvLIDzRD7hbZDYlbUCQ',maxZoom=24,overlay=True))data['Y']=data.Count.apply(lambda x:np.log2(x+1) if not pd.isna(x) else np.nan)
max_v = data.Y.max()
def get_color(x,name):if pd.isna(name):return 'darkgrey'if pd.isna(x):return 'darkgrey'return matplotlib.colors.rgb2hex(plt.get_cmap('Spectral_r')(x/max_v))# return cmap(x)ticks=[]
for i in np.arange(start=0,stop=1.1,step=0.1):ticks.append(int(2**(i * max_v) -1))
print(ticks)
cmap = cm.LinearColormap([plt.get_cmap('Spectral_r')(i) for i in np.arange(start=0,stop=1.1,step=0.1)],index=np.arange(start=0,stop=1.1,step=0.1),vmin=0, vmax=1,max_labels=20).to_step(10) #tick_labels=ticks,cmap.caption="Number of download"
my_map.add_child(cmap)# add different color to each country according to the number of download
folium.GeoJson(data,style_function=lambda feature: {'fillColor': get_color(feature['properties']['Y'],feature['properties']['NAME']),'color': 'gold','fillOpacity':1,'opacity':0.7,'weight': 1,'dashArray': '0.8, 0.8'}
).add_to(my_map)#add country names onto the map.
for i,row in data.iterrows():if pd.isna(row['CountryName']):continuecenter=row.geometry.centroidif row.geometry.area <= 5:continuefontsize= min(3+row.geometry.area / 70,10)folium.map.Marker([center.y, center.x],icon=DivIcon(html='<div style="color:black; font-size: %spt; font-weight: bold"; opacity: 0.5>%s</div>'%(fontsize,row['NAME']),)).add_to(my_map)my_map.save('map1.html')
my_map
[0, 2, 8, 26, 82, 249, 755, 2283, 6894, 20813, 62829]
这里需要注意,最大的难点在于图例,因为这个数据分布不均匀,大部分下载量都很小,集中在1-3000,最大的是中国(下载量是6万多,其次是美国,1万多,排第三的只有3000左右)。 如果用线性的图例配色,那么,1-3000的那些绝大多数国家,颜色就都是一样的(比如都是蓝色),只有中国是红色,就不好看。
所以,我们需要使用非线形的colormap。
我首先对下载量data.count进行log转换,转换后,最大值是15左右,然后再缩放(除以最大值)到0-1之间,再采用线性的colormap来解决上述问题。
此外,我们在标注国家名字时,将名字标注在每个国家的中心位置,字体大小还可以根据该国家的面积来自动缩放。
处理图例-方法1:手动编辑
因为我们目前的下载量被缩放到了0-1之间,但是地图的图例上面需要展示真实的下载量,而不是缩放之后的小数。
有2个方法可以修改图例,第一个方法是将图例上面缩放之后的小数,比如0.1,0.2,0.3,通过逆向运算,就可以算出处理之前的真实下载量,比如,我们在处理原始数据时,先对下载量进行了log2转换,然后再除以最大值(max_v):data['Y']=data.Count.apply(lambda x:np.log2(x+1) if not pd.isna(x) else np.nan)。
那么逆运算就是先乘以max_v再做2的幂指数运算,最后减去1,就是我们原始的下载量:
R=[]
for i in np.arange(start=0,stop=1.1,step=0.1):R.append(int(2**(i * max_v) -1))
print(R)
[0, 2, 8, 26, 82, 249, 755, 2283, 6894, 20813, 62829]
上面打印出来的,就是图例上对应的原始下载量,然后手动将图例上面的小数替换成上述真实数字即可。手动在html或者pdf编辑器中将0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1替换成[0, 2, 8, 26, 82, 249, 755, 2283, 6894, 20813, 62829]
处理图例-方法2:自动替换
我们也可以用Javascript代码自动化处理,大致原理就是用javscript读取并识别图例的tick labels,做逆运算,自动替换为原始下载量
from branca.element import Element
e = Element("""var ticks = document.querySelectorAll('div.legend g.tick text')for(var i = 0; i < ticks.length; i++) {var value = parseFloat(ticks[i].textContent.replace(',', ''))console.log(value)var newvalue = (Math.pow(2, value * 15.939188921332656).toFixed(0)-1).toString()ticks[i].textContent = newvalue}
""")
html = cmap.get_root()
html.script.get_root().render()
html.script.add_child(e)
#如果需要保存成html可以添加
my_map.save('map2.html')
my_map
5、备选方法:folium.Choropleth函数
最后,在folium包中,还可以用另外一个函数Choropleth函数也可以画出上面的图,但是这个方法画出来的图,图例也是有问题的,需要手动修改图例。
感兴趣的朋友可以研究一下,附上代码:
scales=[1,5,10,50,100,200,500,1000,2000,3000,20000,62830]
data['ID']=data.index.tolist()my_map = folium.Map(title="World Map",location=(50,5),max_zoom=1,control_scale=True,prefer_canvas=True,zoom_control=False,width='80%',height='90%',zoom_start=2.49,#tiles='Stamen Terrain', #Stamen Watercolor# titles="http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunityENG/MapServer/tile/{z}/{y}/{x}",tiles=folium.TileLayer('https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={apikey}',attr='© <a href="http://www.thunderforest.com/">Thunderforest</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',apikey='pk.eyJ1IjoiZGluZ3diIiwiYSI6ImNsY3doNmluazBmd2Qzb29lbzVrYXltdjYifQ.H8sWvLIDzRD7hbZDYlbUCQ',maxZoom=24,overlay=True))c = folium.Choropleth(geo_data=data,name='choropleth',data=data,columns=['ID', 'Count'],key_on='feature.id',fill_color='Spectral_r',#'red',#'RdYlGn_r',nan_fill_color='darkgray',fill_opacity=0.8,line_opacity=0.5,legend_name='No.Download',highlight=True,threshold_scale=scales
)# print(c._children)
for child in c._children:if child.startswith("color_map"):del c._children[child]c.add_to(my_map)cmap=cm.linear.Spectral_11.to_step(11).scale(1,62830)cmap.caption="Number of download"
my_map.add_child(cmap)#add country names onto the map.
for i,row in data.iterrows():if pd.isna(row['CountryName']):continuecenter=row.geometry.centroidif row.geometry.area <= 5:continuefontsize= min(3+row.geometry.area / 70,10)folium.map.Marker([center.y, center.x],icon=DivIcon(html='<div style="color:black; font-size: %spt; font-weight: bold"; opacity: 0.5>%s</div>'%(fontsize,row['NAME']),)).add_to(my_map)my_map.save('map3.html')
my_map
最后,我们也来蹭一下ChatGPT的热度,试试让ChatGPT来帮我们写一篇微信公众号推文,来教大家怎么用Folium来画世界地图。看看这个工智能聊天机器人程序能否给我想要的答案。请看截图:
不得不佩服,ChatGPT确实很厉害,难怪它以这么快的速度火遍全球。
大家有什么问题、建议或者更好的画图方法,欢迎关注Computational Biology公众号一起交流学习。
此代码来源于 iMeta期刊 文章,若使用此代码,请引用以下文章:
Yong-Xin Liu, Chun-Lin Shi, Tengfei Ma, Wubin Ding, Danyi Li, Tong Chen, Jingyuan Fu, Shuang-Jiang Liu. 2023. iMeta progress and acknowledgment of reviewers in 2022. iMeta 2: e89. https://doi.org/10.1002/imt2.89
更多推荐
(▼ 点击跳转)
高引文章 ▸▸▸▸
iMeta | 德国国家肿瘤中心顾祖光发表复杂热图(ComplexHeatmap)可视化方法
▸▸▸▸
iMeta | 浙大倪艳组MetOrigin实现代谢物溯源和肠道微生物组与代谢组整合分析
▸▸▸▸
iMeta | 高颜值绘图网站imageGP+视频教程合集
第1卷第1期
第1卷第2期
第1卷第3期
第1卷第4期
期刊简介
“iMeta” 是由威立、肠菌分会和本领域数百位华人科学家合作出版的开放获取期刊,主编由中科院微生物所刘双江研究员和荷兰格罗宁根大学傅静远教授担任。目的是发表原创研究、方法和综述以促进宏基因组学、微生物组和生物信息学发展。目标是发表前10%(IF > 15)的高影响力论文。期刊特色包括视频投稿、可重复分析、图片打磨、青年编委、前3年免出版费、50万用户的社交媒体宣传等。2022年2月正式创刊发行!
联系我们
iMeta主页:http://www.imeta.science
出版社:https://onlinelibrary.wiley.com/journal/2770596x
投稿:https://mc.manuscriptcentral.com/imeta
邮箱:office@imeta.science