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 相关文章推荐
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
May 22 Python
Python将阿拉伯数字转换为罗马数字的方法
Jul 10 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
python pandas实现excel转为html格式的方法
Oct 23 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
Python读取stdin方法实例
May 24 Python
简单了解python单例模式的几种写法
Jul 01 Python
在VS2017中用C#调用python脚本的实现
Jul 31 Python
python随机数分布random均匀分布实例
Nov 27 Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 Python
python实现扫雷游戏的示例
Oct 20 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
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
Javascript引用指针使用介绍
2012/11/07 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
[01:03:37]Secret vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
python 输出一个两行字符的变量
2009/02/05 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
python实现简单猜单词游戏
2020/12/24 Python
python 递归相关知识总结
2021/03/03 Python
财务人员个人求职信范文
2013/12/04 职场文书
超市开店计划书
2014/04/26 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
初中化学教学反思
2016/02/22 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
Redis基本数据类型List常用操作命令
2022/06/01 Redis