赞
踩
五一小长假来了,很多人想抓住小长假的机会去旅游。
5A景区是大多数人的首选,全国最新有多少个5A景区呢,应该还有很多人不知道。本文用Python进行可视化,告诉你答案。
用瀑布图的方式展示各年的5A景区数量,截止2023年5月,全国共有319个5A景区。实现代码如下。
瀑布图介绍参考:循序渐进,学会用pyecharts绘制瀑布图。
from pyecharts.charts import Geo, Map, Bar from pyecharts import options as opts from pyecharts.globals import GeoType, ChartType import pandas as pd import numpy as np def scenery_num_by_year(): """5A景区数按年增长情况""" df = pd.read_excel('scenery_info.xlsx') s = df['年份'].value_counts().sort_index() bar = Bar(init_opts=opts.InitOpts(width='800px', height='500px')) bar.add_xaxis( s.index.to_list() ).add_yaxis( '', y_axis=[0, 66, 76, 119, 145, 171, 183, 212, 227, 249, 258, 280, 302, 306], category_gap=1, stack="5A景区总数", itemstyle_opts=opts.ItemStyleOpts(color="rgb(240,240,240)") ).add_yaxis( '新增数量', y_axis=s.to_list(), stack="5A景区总数", category_gap=1 ).set_global_opts( title_opts=opts.TitleOpts( title='各年5A景区数量变化', pos_left='300', pos_top='15', title_textstyle_opts=opts.TextStyleOpts(color='#1A56C8', font_size=16) ), xaxis_opts=opts.AxisOpts( split_number=6, axislabel_opts=opts.LabelOpts(font_size=12, color='#1A56C8') ), yaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(font_size=12, color='#1A56C8', margin=12, font_weight='bolder'), ), legend_opts=opts.LegendOpts(is_show=False) ).set_series_opts( yaxis_opts=opts.AxisOpts(type_="value"), ).render('5a_scenery_num_by_year.html')
江苏省共有25个5A景区,一骑绝尘。实现代码如下。
def scenery_num_by_province(): """各省5A景区数排名""" df = pd.read_excel('scenery_info.xlsx') s = df['所属地区'].value_counts(ascending=True) bar = Bar(init_opts=opts.InitOpts(width='800px', height='1000px', bg_color='#C8C8C8')) bar.add_xaxis( s.index.to_list() ).add_yaxis( '', s.to_list(), category_gap=5 ).reversal_axis().set_global_opts( title_opts=opts.TitleOpts( title='各省5A景区数排名', pos_left='280', pos_top='15', title_textstyle_opts=opts.TextStyleOpts(color='#1A56C8', font_size=16) ), xaxis_opts=opts.AxisOpts( max_=30, split_number=6, is_show=False, ), yaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(font_size=12, color='#1A56C8', margin=12, font_weight='bolder'), splitline_opts=opts.SplitLineOpts(is_show=False) ), legend_opts=opts.LegendOpts(is_show=False) ).set_series_opts( label_opts=opts.LabelOpts( font_size=14, font_weight='bolder', font_family='italic', color='#7030A0', position='right', distance=10, vertical_align='middle' ) ).set_colors('#FF9366').render('5a_scenery_num_by_province.html') def province_name_paser(name): province_name = ["北京市", "天津市", "河北省", "山西省", "内蒙古自治区", "辽宁省", "吉林省", "黑龙江省", "上海市", "江苏省", "浙江省", "安徽省", "福建省", "江西省", "山东省", "河南省", "湖北省", "湖南省", "广东省", "广西壮族自治区", "海南省", "重庆市", "四川省", "贵州省", "云南省", "西藏自治区", "陕西省", "甘肃省", "青海省", "宁夏回族自治区", "新疆维吾尔自治区", "台湾省", "香港特别行政区", "澳门特别行政区"] for p in province_name: if name in p: return p
上图可视化了各省的5A景区分布情况,沿海地区、长江黄河流域、平原区域5A景区更多。实现代码如下。
def scenery_by_province(): """各省5A景区数量分布""" map = Map(init_opts=opts.InitOpts(bg_color='black', width='1300px', height='700px')) df = pd.read_excel('scenery_info.xlsx') df['所属地区'] = df['所属地区'].apply(lambda x: province_name_paser(x)) s = df['所属地区'].value_counts() data_pair = [[province, int(s[province])] for province in s.index] # print(data_pair) map.add( '', data_pair=data_pair, maptype="china", is_map_symbol_show=False ).set_global_opts( title_opts=opts.TitleOpts( title='各省5A景区数量分布', pos_left='550', pos_top='50', title_textstyle_opts=opts.TextStyleOpts(color='white', font_size=16) ), visualmap_opts=opts.VisualMapOpts( max_=27, is_piecewise=True, pos_left='350', pos_bottom='100', split_number=9, textstyle_opts=opts.TextStyleOpts(color='white', font_size=10) ), legend_opts=opts.LegendOpts(is_show=False) ).set_series_opts( label_opts=opts.LabelOpts(font_size=8, font_weight='bolder', font_family='monospace') ).render("5a_scenery_by_province.html")
把所有5A景区的位置标注出来,可以更方便查看景区的位置和分布情况。实现代码如下。
def scenery_location_mark(): """5A景区位置标注""" geo = Geo(init_opts=opts.InitOpts(bg_color='black', width='1600px', height='900px')) df = pd.read_excel('scenery_info.xlsx') for row_index, row_data in df.iterrows(): geo.add_coordinate(row_data['景区名称'], row_data['经度'], row_data['纬度']) data_pair = [(name, 1) for name in df['景区名称']] # print(data_pair) geo.add_schema( maptype='china', is_roam=True, itemstyle_opts=opts.ItemStyleOpts(color='#323c48', border_color='#408080') ).add( '', data_pair=data_pair, type_=GeoType.SCATTER, symbol='pin', symbol_size=16, color='#CC3300' ).set_series_opts( label_opts=opts.LabelOpts(is_show=False) ).set_global_opts( title_opts=opts.TitleOpts( title='全国5A景区位置标注图', pos_left='720', pos_top='50', title_textstyle_opts=opts.TextStyleOpts(color='#1A56C8', font_size=18) ), legend_opts=opts.LegendOpts(is_show=False) ).render('5a_scenery_location_mark.html')
如果你需要excel表格的数据和完整的可视化代码,请WX私信联系我获取。
数据来源:
[1] 5A景区信息来源于中国文旅部官网。
[2] 5A景区的经纬度来源于百度地图。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。