python绘制地震散点图


Posted in Python onJune 18, 2019

本项目是利用五年左右的世界地震数据,通过python的pandas库、matplotlib库、basemap库等进行数据可视化,绘制出地震散点图。主要代码如下所示

from __future__ import division
import pandas as pd
from pandas import Series,DataFrame
import numpy as np
from matplotlib.patches import Polygon
 
chi_provinces = ['北京','天津','上海','重庆',
     '河北','山西','辽宁','吉林',
     '黑龙江','江苏','浙江','安徽',
     '福建','江西','山东','河南',
     '湖北','湖南','广东','海南',
     '四川','贵州','云南','陕西',
     '甘肃','青海','台湾','内蒙古',
     '广西','西藏','宁夏','新疆',
     '香港','澳门'] #list of chinese provinces
 
 
def is_in_china(str):
 if str[:2] in chi_provinces:
  return True
 else:
  return False
 
def convert_data_2014(x):
 try:
  return float(x.strip())
 except ValueError:
  return x
 except AttributeError:
  return x
 
def format_lat_lon(x):
 try:
  return x/100
 except(TypeError):
  return np.nan
 
df = pd.read_excel(r'C:/Users/GGWS/Desktop/shuju/201601-12.xls')
df = df.append(pd.read_excel(r'C:/Users/GGWS/Desktop/shuju/201201-12.xls'),ignore_index = True)
df = df.append(pd.read_excel(r'C:/Users/GGWS/Desktop/shuju/shuju.xls'),ignore_index = True)
df = df.append(pd.read_excel(r'C:/Users/GGWS/Desktop/shuju/201501-12.xls'),ignore_index = True)
df_2014 = pd.read_excel(r'C:/Users/GGWS/Desktop/shuju/201401-12.xls') #have to introduce statics of 2014 independently because the format and the type of data of specific column in this data set are different from others
df['longitude'] = df['longitude'].apply(convert_data_2014)
df['latitude'] = df['latitude'].apply(convert_data_2014)
 
df_2014['longitude'] = df_2014['longitude'].apply(convert_data_2014)
df_2014['latitude'] = df_2014['latitude'].apply(convert_data_2014)
df = df.append(df_2014,ignore_index = True)
 
df = df[['latitude','longitude','magnitude','referenced place','time']] #only save four columns as valuable statics
 
df[['longitude','latitude']] = df[['longitude','latitude']].applymap(format_lat_lon) #use function "applymap" to convert the format of the longitude and latitude statics
df = df.dropna(axis=0,how='any') #drop all rows that have any NaN values
format_magnitude = lambda x: float(str(x).strip('ML'))
df['magnitude'] = df['magnitude'].apply(format_magnitude)
#df = df[df['referenced place'].apply(is_in_china)]
 
lon_mean = (df['longitude'].groupby(df['referenced place'])).mean()
lat_mean = (df['latitude'].groupby(df['referenced place'])).mean()
group_counts = (df['magnitude'].groupby(df['referenced place'])).count() 
after_agg_data = pd.concat([lon_mean,lat_mean,group_counts], axis = 1 )
after_agg_data.rename(columns = {'magnitude':'counts'} , inplace = True)
 #aggregate after grouping the data
 
after_sorted_data = after_agg_data.sort_values(by = 'counts',ascending = False)
new_index = np.arange(len(after_sorted_data.index))
after_sorted_data.index = new_index
paint_data = after_sorted_data[after_sorted_data['counts']>=after_sorted_data['counts'][80]]
 
 
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
 
plt.figure(figsize=(16,8))
m = Basemap()
m.readshapefile(r'C:/Users/GGWS/Desktop/jb/gadm36_CHN_1', 'states', drawbounds=True)
ax = plt.gca()
'''
for nshape,seg in enumerate (m.states):
 poly = Polygon(seg,facecolor = 'r')
 ax.add_patch(poly)
'''
m.drawcoastlines(linewidth=0.5)
m.drawcountries(linewidth=0.5)
m.shadedrelief()
 
 
for indexs in df.index:
  lon2,lat2 = df.loc[indexs].values[1],df.loc[indexs].values[0]
  x,y = m(lon2,lat2)
  m.plot(x,y,'ro',markersize = 0.5)      #获取经度值
'''
for indexs in after_sorted_data.index[:80]:
 lon,lat = after_sorted_data.loc[indexs].values[0],after_sorted_data.loc[indexs].values[1]
 x,y = m(lon,lat)
 m.plot(x,y,'wo',markersize = 10*(after_sorted_data.loc[indexs].values[2]/after_sorted_data.loc[0].values[2]))
'''
plt.title("Worldwide Earthquake") 
plt.show() 
 
#indexs-len(df.index)+80

效果如下

python绘制地震散点图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python paramiko实现ssh远程访问的方法
Dec 03 Python
Python中使用items()方法返回字典元素对的教程
May 21 Python
Python判断值是否在list或set中的性能对比分析
Apr 16 Python
Python中property函数用法实例分析
Jun 04 Python
win10下tensorflow和matplotlib安装教程
Sep 19 Python
Python列表(List)知识点总结
Feb 18 Python
在python plt图表中文字大小调节的方法
Jul 08 Python
django使用django-apscheduler 实现定时任务的例子
Jul 20 Python
Python实现生成密码字典的方法示例
Sep 02 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
python的Jenkins接口调用方式
May 12 Python
python f-string式格式化听语音流程讲解
Jun 18 #Python
python实现雪花飘落效果实例讲解
Jun 18 #Python
python地震数据可视化详解
Jun 18 #Python
Python实现FM算法解析
Jun 18 #Python
python pygame实现五子棋小游戏
Oct 26 #Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
Jun 18 #Python
python制作简单五子棋游戏
Jun 18 #Python
You might like
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
php输出xml属性的方法
2015/03/19 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
Javascript注入技巧
2007/06/22 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
Python编程之event对象的用法实例分析
2017/03/23 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
PHP如何自定义函数
2016/09/16 面试题
UNIX文件名称有什么规定
2013/03/25 面试题
贷款委托书范本
2014/04/08 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
团队合作精神学习心得体会
2016/01/19 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
详解Redis主从复制实践
2021/05/19 Redis
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android