python读取excel数据、转换度分为度,绘制填色图

简介: python读取excel数据、转换度分为度,绘制填色图

python绘图记录



  • 读取excel文件
  • 将度分的经纬度转换为度
  • 绘制填色图
  • 两种添加网格线的方式


# -*- coding: utf-8 -*-
"""
Created on Mon Sep 19 10:32:00 2022
@author: Administrator
"""
import shapely.geometry as sgeom
import xarray as xr
import numpy  as np
import matplotlib.pyplot as plt
import glob
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import pandas as pd
import calendar
import os
import re
import matplotlib.ticker as mticker
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
path = r'D:/data_1.xlsx'
data = pd.read_excel(io=path,sheet_name='name')
lon = data['经度'].to_numpy()[1:]
lat = data['纬度'].to_numpy()[1:]
def convert_lon(lon):
    if len(lon)==1:
        a = float(lon[0:3])
        b = float(lon[4:-1])
        c = b/60
        d = a + c
    else:
        d = np.zeros(lon.shape)
        for i in range(len(lon)):
            a1 = float(lon[i][0:3])
            b1 = float(lon[i][4:-1])/60
            d[i] = a1 + b1
    return d
def convert_lat(lon):
    if len(lon)==1:
        a = float(lon[0:2])
        b = float(lon[3:-1])
        c = b/60
        d = a + c
    else:
        d = np.zeros(lon.shape)
        for i in range(len(lon)):
            a1 = float(lon[i][0:2])
            b1 = float(lon[i][3:-1])/60
            d[i] = a1 + b1
    return d
lon_new = convert_lon(lon)
lat_new = convert_lat(lat)
#### ======================================================================================
#### ===================================read_nc ==============================================
#### ======================================================================================
nc_path = r'D:/data2.nc'
ds = xr.open_dataset(nc_path)
depth = ds.bathymetry.sel(lat=slice(25,41),lon=slice(115,135))
depth_data =depth.data    
depth_data[depth_data ==-10] = np.nan
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
#### ======================================================================================
#### ===================================draw ==============================================
#### ======================================================================================
fig = plt.figure(figsize=(8, 6), dpi=200)  
proj = ccrs.PlateCarree()
ax = plt.axes(projection=ccrs.PlateCarree(central_longitude=180))
extents = [117.5,127,29.5,40.5]
ax.set_extent(extents, crs=proj)
# 添加各种特征
ax.add_feature(cfeature.LAND, edgecolor='black',facecolor='silver',
                # zorder=1,
               )
ax.add_feature(cfeature.LAKES, edgecolor='black',facecolor='w',
               # zorder=2
               )
ax.add_feature(cfeature.BORDERS)
# ax.add_feature(cfeature.NaturalEarthFeature('physical', 'land', '10m', \
#     edgecolor='k', facecolor='silver'))
# # 添加网格线
xtick = np.arange(118, 128, 2)
ytick = np.arange(30,41, 1)
# ax.coastlines()
tick_proj = ccrs.PlateCarree()
ax.set_xticks(xtick, crs=tick_proj)
ax.set_xticks(xtick,  crs=tick_proj)
ax.set_yticks(ytick, crs=tick_proj)
ax.set_yticks(ytick, crs=tick_proj)
ax.tick_params(which='major', direction='in', 
                length=3, width=0.4, 
                pad=0.2, bottom=True, left=True, right=False, top=False)
# # # # 利用Formatter格式化刻度标签
ax.xaxis.set_major_formatter(LongitudeFormatter())
ax.yaxis.set_major_formatter(LatitudeFormatter())
plt.yticks(fontproperties='Times New Roman',size=10)
plt.xticks(fontproperties='Times New Roman',size=10)
cmap=plt.get_cmap('RdYlBu')
ax.gridlines(linestyle='--',
             xlocs=xtick,
             ylocs=ytick,
              x_inline=False, 
              y_inline=False,
              zorder=2,
             linewidth=0.5, 
             color='grey')
step=2
cb =  ax.contourf(depth.lon,depth.lat,-depth_data,
            transform=ccrs.PlateCarree(),
            cmap=cmap,
            # levels=np.arange(0,120+step,step),
            levels=np.arange(-100,0+step,step),
            zorder=2,
            )
ac=ax.contour(-depth_data,colors='grey',
              levels=np.arange(-100,0,20),
           transform=ccrs.PlateCarree(),)
ax.clabel(ac)
ax.scatter(lon_new,lat_new,marker='s',s=10,
           #color='dimgray',
           color='dimgray',
            transform=ccrs.PlateCarree(),
            zorder=2,
            )
fig.colorbar(cb,
             # shrink=0.9,
              ticks=-np.array([0,10,20,30,40,50,60,70,80,90,100]),
              label='Depth(m)')
plt.show()
# gl = ax.gridlines(
#                   linestyle='--', draw_labels=False,
#                   )
# gl.xlabels_top = False
# gl.ylabels_left = True
# gl.ylabels_right=False
# gl.xlines = True
# gl.xlocator = mticker.FixedLocator([118,120,122,124,126])
# gl.ylocator = mticker.FixedLocator([30,31,32,33,34,35,36,37,38,39,40])
# gl.xformatter = LONGITUDE_FORMATTER
# gl.yformatter = LATITUDE_FORMATTER
# gl.xlabel_style = {'color': 'black', 'weight': 'bold'}


相关文章
|
2月前
|
Python
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
4月前
|
存储 安全 大数据
网安工程师必看!AiPy解决fscan扫描数据整理难题—多种信息快速分拣+Excel结构化存储方案
作为一名安全测试工程师,分析fscan扫描结果曾是繁琐的手动活:从海量日志中提取开放端口、漏洞信息和主机数据,耗时又易错。但现在,借助AiPy开发的GUI解析工具,只需喝杯奶茶的时间,即可将[PORT]、[SERVICE]、[VULN]、[HOST]等关键信息智能分类,并生成三份清晰的Excel报表。告别手动整理,大幅提升效率!在安全行业,工具党正碾压手动党。掌握AiPy,把时间留给真正的攻防实战!官网链接:https://www.aipyaipy.com,解锁更多用法!
|
2月前
|
Python
将Excel特定某列数据删除
将Excel特定某列数据删除
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据分析,别再死磕Excel了!
Python数据分析,别再死磕Excel了!
165 2
|
9月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
1491 10
|
7月前
|
分布式计算 Hadoop 大数据
从Excel到Hadoop:数据规模的进化之路
从Excel到Hadoop:数据规模的进化之路
124 10
|
8月前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
9月前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
10月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
543 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
11月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
508 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档

推荐镜像

更多