前言:

为了制作全球地震散点图,我在网上下载了一个数据集,其中记录了一个月内全球发生的所有地震,但这些数据是以JSON格式存储的,因此需要用json模块来进行处理。

查看JSON数据

首先我们先打开下载好的数据集浏览一下:

你会发现其中的数据密密麻麻,根本不是人读的,因此,接下来我们将对数据进行处理,让它变得简单易读。

import json#导入json模块,以便于加载文件中的数据
filename='eq_data_1_day_m1.json'
with open(filename) as f:
    all_eq_data=json.load(f)#json.load(),将数据转化为Python能够处理的格式
readable_file='eq_data_1_day_m1.json'#创建一个文件,以便将这些数据以易于阅读的方式写入其中
with open(readable_file,'w') as f:
    json.dump(all_eq_data,f,indent=4)#json.dump()将数据读入其中
    #参数indent让dump()使用与数据结构匹配的缩进量来设置数据的格式

经过处理之后,我们再打开这个文件会发现里面的数据变得清晰了许多。

从中我们能够快速获取数据的很多信息,比如地震的次数,类型等等,不仅如此,我们还能够知道有关这些数据的一些信息,比如,它的生成时间,他在网页上怎么获取等等。

参数indent

如果indent是非负整数或字符串,则JSON数组元素和对象成员将使用该缩进级别进行打印。如果indent为0,负数或“”只会插入换行符。
None(默认)则选择最紧凑的表示形式。,使用正整数缩进会使每个级别缩进多个空格。,如果缩进是字符串(例如“
t”),则该字符串用于缩进每个级别。

当我们将缩进量修改为0时,文件的排版也会发生变化:

json.dump(all_eq_data,f,indent=0)

创建地震列表

import json
filename='eq_data_1_day_m1.json'
with open(filename) as f:
    all_eq_data=json.load(f)#对文件进行处理
all_eq_dicts=all_eq_data['features']
print(len(all_eq_dicts))#提取出这个文件记录的所有地震

输出结果如下:

158

是的,从文件的开头,我们就可以确定地震的次数为158次,因此输出结果正确:

提取震级

方法即是新建立一个列表用来存放震源的有关数据,再提取字典features的properties部分的mag.

代码如下:

import json
filename='eq_data_1_day_m1.json'
with open(filename) as f:
    all_eq_data=json.load(f)
all_eq_dicts=all_eq_data['features']
mags=[]
for eq_dict in all_eq_dicts:
    mag=eq_dict['properties']['mag']
    mags.append(mag)
print(mags[:10])#打印前十次的震级数据

[0.96, 1.2, 4.3, 3.6, 2.1, 4, 1.06, 2.3, 4.9, 1.8]

提取位置数据

首先,我们需要在文件中找到关于经度和维度的部分,如下所示,我们在文件中查找到,它是存在于geometry字典下,coordinates键中的。

---snip---
all_eq_dicts=all_eq_data['features']
mags,titles,lons,lats=[],[],[],[]
for eq_dict in all_eq_dicts:
    mag=eq_dict['properties']['mag']
    title=eq_dict['properties']['title']
    lon=eq_dict['geometry']['coordinates'][0]#提取coordinates键中索引值为0的数据
    lat=eq_dict['geometry']['coordinates'][1]
    mags.append(mag)
    titles.append(title)
    lons.append(lon)
    lats.append(lat)
print(mags[:10])
print(titles[:2])
print(lons[:5])#输出前五个经度
print(lats[:5])#输出前五个维度

输出结果如下:

[0.96, 1.2, 4.3, 3.6, 2.1, 4, 1.06, 2.3, 4.9, 1.8]
['M 1.0 - 8km NE of Aguanga, CA', 'M 1.2 - 11km NNE of North Nenana, Alaska']
[-116.7941667, -148.9865, -74.2343, -161.6801, -118.5316667]
[33.4863333, 64.6673, -12.1025, 54.2232, 35.3098333]

绘制震级散点图

通过我们前面提取的有关震源的数据,下面我们可对提取的数据进行可视化作图:

import plotly.express as px#Plotly Express是Plotly的高级接口,相当于Matplotlib是一个工具
fig=px.scatter(
    x=lons,
    y=lats,
    labels={'x':'经度','y':'维度'},
    range_x=[-200,200],
    range_y=[-90,90],
    #width和height代表图表的高度和宽度均为800像素
    width=800,
    height=800,
    title="全球地震散点图",
)
fig.write_html('global_earthquakes.html')#将可视化图保存为html文件
fig.show()

散点图配置完成后,下面我们在程序目录下寻找我们保存的可视化图(global_earthquakes.html),再使用浏览器打开该html文件
如下所示,即为散点图:

指定图表数据的方式

上面我们绘制地震散点图是通过手动配置经纬度,通过将x,y和经度,纬度建立联系:

x=lons,
y=lats,
labels={'x':'经度','y':'维度'},

但这在数据处理过程中并不是最简单的方式,下面我们介绍另一种图表指定数据的方式,需要结合我们上面所提到的pandas数据分析工具。

import pandas as pd#导入pandas模块x
data=pd.DataFrame(data=zip(lons,lats,titles,mags),colums=['经度','纬度','位置','震级'])#使用DataFrame将需要处理的数据封装,注意:DataFrame后面的两个参数是可选的,如果这两个参数存在的话,这两个参数的长度要和DataFrame的长度匹配
#zip()函数的作用:将可迭代的对象中的对应元素打包为多个元祖,再返回由这些元祖组成的列表
data.head()

DataFrame()函数

它是Python中pandas库中的一种数据结构,和excel比较相似,它不仅可以设置列名columns和行名index,而且它的单元格可以存放数值,字符串等。

data.head():返回数据的前几行数据,默认是前五行,如果需要指定则写data.head(‘指定的行数’)

data.tail():返回data的后几行数据,默认为后五行,如果需要指定则写data.tail(‘指定的行数’)

数据封装好之后,参数的配置方式可修改为:

data,
x='经度',
y='纬度',

现在我们通过这种参数配置方式进行地震散点图的绘制:

#创建地震列表,提取数据
import json
filename='eq_data_1_day_m1.json'
with open(filename) as f:
    all_eq_data=json.load(f)
all_eq_dicts=all_eq_data['features']
mags,titles,lons,lats=[],[],[],[]
for eq_dict in all_eq_dicts:
    mag=eq_dict['properties']['mag']
    title=eq_dict['properties']['title']
    lon=eq_dict['geometry']['coordinates'][0]#提取coordinates键中索引值为0的数据
    lat=eq_dict['geometry']['coordinates'][1]
    mags.append(mag)
    titles.append(title)
    lons.append(lon)
    lats.append(lat)
 #参数配置设置
import pandas as pd   
data=pd.DataFrame(
    data=zip(lons,lats,titles,mags),columns=['经度','纬度','位置','震级']
)
data.head()
#绘制散点图
import plotly.express as px
fig = px.scatter(
    data,
    x='经度',
    y='纬度',
    range_x=[-200, 200],
    range_y=[-90, 90],
    width=800,
    height=800,
    title="全球地震散点图",
)
fig.write_html('global_earthquake.html')
fig.show()

配置完成后,下面我们在程序目录下寻找我们保存的可视化图(global_earthquakes.html),再使用浏览器打开该html文件如下图所示:

通过输出结果,我们可得出,无论使用那种参数配置方式,其输出结果都是相同的,但第二种这种以键值对的方式,更加清晰。

设计标记点的尺寸

和我们上篇文章提到的与温度有关的散点图相类似,我们希望知道最高温度和最低温度等这些特殊且重要的信息,那么震源散点图也是如此,上图我们所设计的震源散点图只是将纬度和经度在图上呈现出来了,但震源并没有体现。

下面,我们将震级也呈现在散点图上:

方法:使用size参数设计散点图中每个尺寸的大小:

size='震级',
size_max=10,

对比上面的两幅图,我们会发现散点图中关于地震的信息还增加了震级,不仅如此,散点的尺寸大小也与震级的大小有关,震级越大,散点的尺寸越大,这样一来,我们很容易观察到不同地方的地震强度,但这还不够直观,为了能够更加直白的呈现地震的情况,我们还设计散点的颜色以便更加清晰的显示。

设计标记的颜色

方法:

color='震级',   #默认渐变色的范围是从蓝到红再到黄,数值越小标记越蓝,而数值越大则标记越黄。

把在网上下载好的近30天的数据文件复制到该程序目录下,将参数color添加其中,再绘制散点图。,注意修改文件名。

如下图所示:

美化后的散点图,不仅在颜色上漂亮了许多,渐变的颜色也更加清晰的反映了地震的严重程度。

获取Plotly Express中所有的渐变色:

不仅如此,Plotly Express还为我们提供了许多的渐变色,而这些渐变色是在px.colors.named_colorscales()中定义的,下面来获取这些渐变色:

import plotly.express as px
for key in px.colors.named_colorscales():
    print(key,end='/')

输出结果如下:

aggrnyl/agsunset/blackbody/bluered/blues/blugrn/bluyl/brwnyl/bugn/bupu/burg/burgyl/cividis
/darkmint/electric/emrld/gnbu/greens/greys/hot/inferno/jet/magenta/magma/mint/orrd/oranges
/oryel/peach/pinkyl/plasma/plotly3/pubu/pubugn/purd/purp/purples/purpor/rainbow/rdbu/rdpu
/redor/reds/sunset/sunsetdark/teal/tealgrn/turbo/viridis/ylgn/ylgnbu/ylorbr/ylorrd/algae
/amp/deep/dense/gray/haline/ice/matter/solar/speed/tempo/thermal/turbid/armyrose/brbg/earth
/fall/geyser/prgn/piyg/picnic/portland/puor/rdgy/rdylbu/rdylgn/spectral/tealrose/temps/tropic
/balance/curl/delta/oxy/edge/hsv/icefire/phase/twilight/mrybm/mygbm/

此外,我们还可将对应配色列表进行反转:

方法:

px.colors.diverging.RdYlGn[::-1]

此外,Plotly除了有px.colors.diverging表示连续的配色方案,还有px.colors.sequential和px.colors.qualitative表示离散变量。每个渐变色都有起始色和终止色,有些渐变色还定义了一个或多个中间色。

添加鼠标指向时显示的文本:

方法,使用参数hover_name,参数配置为data的‘位置’

hover_name='位置',

修改后,散点图的输出如下所示:

我们发现,对比于前面的图表,此时又增加了位置信息,此时,我们就完整的绘制了一副关于地震信息的散点图。

到此这篇关于Python数据可视化制作全球地震散点图的文章就介绍到这了,更多相关Python地震散点图内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Python数据可视化制作全球地震散点图的更多相关文章

  1. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  2. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  3. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  4. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  7. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  8. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

  9. 在Android上用Java嵌入Python

    解决方法看看this,它适用于J2SE,你可以尝试在Android上运行.

  10. 在android studio中使用python代码构建android应用程序

    我有一些python代码和它的机器人,我正在寻找一种方法来使用android项目中的那些python代码.有没有办法做到这一点!?解决方法有两种主要工具可供使用,它们彼此不同:>QPython>Kivy使用Kivy,大致相同的代码也可以部署到IOS.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部