热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python画好看的图python如何画出漂亮的地图?

推荐一个超好用的python包folium,专门用于地理数据可视化,官方英文教程教程点击这里,查看本文源代码请点击这里。使用方法很简单,

推荐一个超好用的python包folium, 专门用于地理数据可视化,官方英文教程教程点击这里,查看本文源代码请点击这里。 />

使用方法很简单,操作如下:导入包,创建一副世界地图

import folium

import pandas as pd

# define the world map

world_map = folium.Map()

# display world map

world_map />

2. 输入经纬度,尺度,在这里我们以旧金山(37.7749° N, 122.4194° W)为例。

# San Francisco latitude and longitude values

latitude = 37.77

longitude = -122.42

# Create map and display it

san_map = folium.Map(location=[latitude, longitude], zoom_start=12)

# Display the map of San Francisco

san_map />

更改地图显示,默认为'OpenStreetMap'风格,我们还可以选择'Stamen Terrain', 'Stamen Toner'等。

# Create map and display it

san_map = folium.Map(location=[latitude, longitude], zoom_start=12,tiles='Stamen Toner') />

3. 读取数据集(旧金山犯罪数据集)

# Read Dataset

cdata = pd.read_csv('https://cocl.us/sanfran_crime_dataset')

cdata.head() />

4. 在地图上显示前200条犯罪数据

# get the first 200 crimes in the cdata

limit = 200

data = cdata.iloc[0:limit, :]

# Instantiate a feature group for the incidents in the dataframe

incidents = folium.map.FeatureGroup()

# Loop through the 200 crimes and add each to the incidents feature group

for lat, lng, in zip(cdata.Y, data.X):

incidents.add_child(

folium.CircleMarker(

[lat, lng],

radius=7, # define how big you want the circle markers to be

color='yellow',

fill=True,

fill_color='red',

fill_opacity=0.4

)

)

# Add incidents to map

san_map = folium.Map(location=[latitude, longitude], zoom_start=12)

san_map.add_child(incidents) />

5. 添加地理标签

# add pop-up text to each marker on the map

latitudes = list(data.Y)

longitudes = list(data.X)

labels = list(data.Category)

for lat, lng, label in zip(latitudes, longitudes, labels):

folium.Marker([lat, lng], popup=label).add_to(san_map)

# add incidents to map

san_map.add_child(incidents) />

6. 统计区域犯罪总数

from folium import plugins

# let's start again with a clean copy of the map of San Francisco

san_map = folium.Map(location = [latitude, longitude], zoom_start = 12)

# instantiate a mark cluster object for the incidents in the dataframe

incidents = plugins.MarkerCluster().add_to(san_map)

# loop through the dataframe and add each data point to the mark cluster

for lat, lng, label, in zip(data.Y, data.X, cdata.Category):

folium.Marker(

location=[lat, lng],

icon=None,

popup=label,

).add_to(incidents)

# add incidents to map

san_map.add_child(incidents) />

7. 读取geojson文件,可视化旧金山市10个不同Neighborhood的边界

import json

import requests

url = 'https://cocl.us/sanfran_geojson'

san_geo = f'{url}'

san_map = folium.Map(location=[37.77, -122.4], zoom_start=12)

folium.GeoJson(

san_geo,

style_function=lambda feature: {

'fillColor': '#ffff00',

'color': 'black',

'weight': 2,

'dashArray': '5, 5'

}

).add_to(san_map)

#display map

san_map />

8. 统计每个区域的犯罪事件数目

# Count crime numbers in each neighborhood

disdata = pd.DataFrame(cdata['PdDistrict'].value_counts())

disdata.reset_index(inplace=True)

disdata.rename(columns={'index':'Neighborhood','PdDistrict':'Count'},inplace=True)

disdata />

9. 创建Choropleth Map (颜色深浅代表各区犯罪事件数目)

m = folium.Map(location=[37.77, -122.4], zoom_start=12)

folium.Choropleth(

geo_data=san_geo,

data=disdata,

columns=['Neighborhood','Count'],

key_on='feature.properties.DISTRICT',

#fill_color='red',

fill_color='YlOrRd',

fill_opacity=0.7,

line_opacity=0.2,

highlight=True,

legend_name='Crime Counts in San Francisco'

).add_to(m)

m />

10. 创建热力图

from folium.plugins import HeatMap

# let's start again with a clean copy of the map of San Francisco

san_map = folium.Map(location = [latitude, longitude], zoom_start = 12)

# Convert data format

heatdata = data[['Y','X']].values.tolist()

# add incidents to map

HeatMap(heatdata).add_to(san_map)

san_map />

本文源代码Jupyter notebook地址:Jupyter Notebook Viewer​nbviewer.jupyter.org

GitHub下载地址:gaonanlee/Visualization-Practice​github.comv2-e05f517cb0ac3afc57ff166e76873091_ipico.jpg

最后,folium还可以用来创建动态热力图,动态路径图等,具体可参考Medium上的这篇文章。

实现效果如下图所示 (直接从Medium上抱过来的图,详细代码请点击上述链接)。 />

我的其他回答

欢迎大家关注我的机器学习笔记专栏,我将用小白也能听懂的语言,为大家讲述机器学习中那些有趣好玩的知识 (●'◡'●)


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 二叉树的前序遍历(递归版):publicArrayList<Integer> ... [详细]
  • 在搜索数据库中的数据时,您可以使用SQL通配符。SQL通配符在搜索数据库中的数据时,SQL通配符可以替代一个或多个字符。SQL通配符必须与LIKE运算符 ... [详细]
  • Flutter 布局(四) Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth详解
    本文主要介绍Flutter布局中的Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth四种控件,详细介绍了其布局 ... [详细]
author-avatar
冰妞qb_424
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有