Python pyecharts.geo绘制美国地图

一、问题提出

pyecharts作为python最好用的可视化的库之一,能够绘制各种图。但在地图方面,pyecharts目前主要用于绘制中国及世界地图,网络上几乎没有介绍用pyecharts绘制其他国家地图的资料,其主要原因是pyecharts的地图包仅含全球国家地图中国省级地图中国市级地图中国区县级地图中国区域地图英国选区地图,而无美国或其他国家的地图。Windows环境下,能安装的地图包及其安装方式如下:

pip install echarts-countries-pypkg                # 全球国家地图
pip install echarts-china-provinces-pypkg          # 中国省级地图
pip install echarts-china-cities-pypkg             # 中国市级地图
pip install echarts-china-counties-pypkg           # 中国区县级地图
pip install echarts-china-misc-pypkg               # 中国区域地图
pip install echarts-united-kingdom-pypkg           # 英国选区图

那么如何通过pyecharts去绘制世界上其他国家的地图呢?

二、解决方案

在查询大量资料无果后,在pyecharts的官方文档中找到了解决思路。
pyecharts官方文档http://gallery.pyecharts.org/#/Geo/geo_chart_countries_js


官方文档样例:

# 绘制瑞士地图
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.datasets import register_url

try:
    register_url("https://echarts-maps.github.io/echarts-countries-js/")
except Exception:
    import ssl

    ssl._create_default_https_context = ssl._create_unverified_context
    register_url("https://echarts-maps.github.io/echarts-countries-js/")

geo = (
    Geo()
    .add_schema(maptype="瑞士")
    .set_global_opts(title_opts=opts.TitleOpts(title="瑞士"))
    .render("geo_chart_countries_js.html")
)

效果图:

pyecharts.geo生成瑞士地图

除瑞士地图之外,通过该方法还可以生成包括美国、俄罗斯等国家在内的217个国家。
部分可生成的国家地图


在此基础上,考虑生成美国地图,并在地图上标注各个州的某产品销量。源文件如下图所示,其中State字段包含美国50个州和特区的缩写,Sale字段为某产品在该州的销量。


原始数据文件
from pyecharts.charts import Geo
from pyecharts.datasets import register_url
# 绘制美国地区销量分布图
def draw_usa_map1():
    try:
        register_url("https://echarts-maps.github.io/echarts-countries-js/")
    except Exception:
        import ssl
        ssl._create_default_https_context = ssl._create_unverified_context
        register_url("https://echarts-maps.github.io/echarts-countries-js/")
    
    df21 = pd.read_excel('D:/test.xlsx',sheet_name='prod1',header = 0)
    states1 = df21['state'].tolist()                                # pandas转list
    sales21 = df21['sale'].tolist()
    list21 = [[states1[i],sales21[i]] for i in range(len(states1))]  # 合并两个list为一个list
    maxsales2 = max(sales21)                                         # 计算最大销量值,用作图例的上限

    geo = (                                                          # 添加坐标点
        Geo(init_opts=opts.InitOpts(width = "1200px", height = "600px", bg_color = '#EEEEE8'))
        .add_schema(maptype="美国",itemstyle_opts=opts.ItemStyleOpts(color="#323c48", border_color="#111"))
        .add_coordinate('WA',-120.04,47.56)
        .add_coordinate('OR',-120.37,43.77)
        .add_coordinate('CA',-120.44,36.44)
        .add_coordinate('AK',-122.00,28.46)
        .add_coordinate('ID',-114.08,43.80)
        .add_coordinate('NV',-116.44,39.61)
        .add_coordinate('MT',-109.42,47.13)
        .add_coordinate('WY',-107.29,42.96)
        .add_coordinate('UT',-111.19,39.35)
        .add_coordinate('AZ',-111.70,34.45)
        .add_coordinate('HI',-105.25,28.72)
        .add_coordinate('CO',-105.52,38.89)
        .add_coordinate('NM',-106.11,34.45)
        .add_coordinate('ND',-100.22,47.53)
        .add_coordinate('SD',-100.52,44.72)
        .add_coordinate('NE',-99.64,41.65)
        .add_coordinate('KS',-98.53,38.43)
        .add_coordinate('OK',-97.13,35.42)
        .add_coordinate('TX',-98.16,31.03)
        .add_coordinate('MN',-94.26,46.02)
        .add_coordinate('IA',-93.60,42.09)
        .add_coordinate('MO',-92.57,38.48)
        .add_coordinate('AR',-92.43,34.69)
        .add_coordinate('LA',-92.49,31.22)
        .add_coordinate('WI',-89.55,44.25)
        .add_coordinate('MI',-84.62,43.98)
        .add_coordinate('IL',-89.11,40.20)
        .add_coordinate('IN',-86.17,40.08)
        .add_coordinate('OH',-82.71,40.31)
        .add_coordinate('KY',-84.92,37.44)
        .add_coordinate('TN',-86.32,35.78)
        .add_coordinate('MS',-89.63,32.66)
        .add_coordinate('AL',-86.68,32.53)
        .add_coordinate('FL',-81.68,28.07)
        .add_coordinate('GA',-83.22,32.59)
        .add_coordinate('SC',-80.65,33.78)
        .add_coordinate('NC',-78.88,35.48)
        .add_coordinate('VA',-78.24,37.48)
        .add_coordinate('WV',-80.63,38.62)
        .add_coordinate('PA',-77.57,40.78)
        .add_coordinate('NY',-75.22,43.06)
        .add_coordinate('MD',-76.29,39.09)
        .add_coordinate('DE',-75.55,39.09)
        .add_coordinate('NJ',-74.47,40.03)
        .add_coordinate('VT',-72.70,44.13)
        .add_coordinate('NH',-71.64,43.59)
        .add_coordinate('MA',-72.09,42.33)
        .add_coordinate('CT',-72.63,41.67)
        .add_coordinate('RI',-71.49,41.64)
        .add_coordinate('ME',-69.06,45.16)
        .add_coordinate('PR',-75.37,26.42)
        .add_coordinate('DC',-77.04,38.90)
        .add("product1", list21, type_=ChartType.EFFECT_SCATTER)
        .set_global_opts(
            title_opts=opts.TitleOpts(title="product1销量分布图"),
            visualmap_opts=opts.VisualMapOpts(max_ = maxsales2,is_piecewise=True),
        )
        .render("D:/prod1.html")
    )

效果图:

美国销量分布图

三、总结

可以通过访问github上的仓库加载世界各国的js文件来实现绘制217个国家的地图,但该方法需要访问github,因此不适用无法访问github的情况。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335