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数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
305 10
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
1月前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
2月前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
2月前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
3月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
92 3
|
3月前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
154 0
|
3月前
|
数据采集 存储 分布式计算
超酷炫Python技术:交通数据的多维度分析
超酷炫Python技术:交通数据的多维度分析

热门文章

最新文章

推荐镜像

更多