• 【python海洋专题三十八】海洋指数画法--折线图样式二


    【python海洋专题三十八】海洋指数画法–折线图样式二

    数据:AMO_index

    图像展示:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    图片

    往期推荐

    图片
    【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件

    【python海洋专题二】读取水深nc文件并水深地形图
    【python海洋专题三】图像修饰之画布和坐标轴

    【Python海洋专题四】之水深地图图像修饰

    【Python海洋专题五】之水深地形图海岸填充

    【Python海洋专题六】之Cartopy画地形水深图

    【python海洋专题】测试数据

    【Python海洋专题七】Cartopy画地形水深图的陆地填充

    【python海洋专题八】Cartopy画地形水深图的contourf填充间隔数调整

    【python海洋专题九】Cartopy画地形等深线图

    【python海洋专题十】Cartopy画特定区域的地形等深线图

    【python海洋专题十一】colormap调色

    【python海洋专题十二】年平均的南海海表面温度图

    【python海洋专题十三】读取多个nc文件画温度季节变化图

    【python海洋专题十四】读取多个盐度nc数据画盐度季节变化图

    【python海洋专题十五】给colorbar加单位

    【python海洋专题十六】对大陆周边的数据进行临近插值

    【python海洋专题十七】读取几十年的OHC数据,画四季图

    【python海洋专题十八】读取Soda数据,画subplot的海表面高度四季变化图

    【python海洋专题十九】找范围的语句进阶版本

    【python海洋专题二十】subplots_adjust布局调整

    【python海洋专题二十一】subplots共用一个colorbar

    【python海洋专题二十二】在海图上text

    【python海洋专题二十三】共用坐标轴

    【python海洋专题二十四】南海年平均海流图

    【python海洋专题二十五】给南海年平均海流+scale

    【python海洋专题二十六】南海海流流速图

    【python海洋专题二十七】南海四季海流图

    【python海洋专题二十八】南海四季海流流速图

    【python海洋专题二十九】读取CTD文件数据并画温度点剖面图

    【python海洋专题三十】画南海115°E的温度剖面图

    【python海洋专题三十一】画南海115°E的地形温度剖面图

    【python海洋专题三十二】画南海115°E的地形温度流速剖面图

    【python海洋专题三十三】画海洋表面的风场分布

    【python海洋专题三十四】调用自己的colormore

    【python海洋专题三十五】加密数据–二维插值

    【python海洋专题三十六】两个一维数组的相关系数–为海洋指数作准备

    【python海洋专题三十七】海洋指数画法–折线图样式一

    【MATLAB海洋专题】历史汇总

    【matlab程序】图片平面制作||文末点赞分享||海报制作等

    大佬推荐一下物理海洋教材吧?

    【matlab海洋专题】高级玫瑰图–风速风向频率玫瑰图–此图细节较多

    【上千种颜色包|全平台可用】收集自Matlab、python、R、NCL等颜色包

    R语言_RColorBrewer包–全平台可用

    海洋专用cmocean颜色包_共22种–全平台可用

    【matlab教程】matlab不规则区域的外围填充

    【海洋科普】沉积物分为粘性沉积物和非粘性沉积物

    【海洋科普】黄渤海地理介绍

    【科普知识】海洋尺度图和解释

    【海洋科普】海洋环流与等高线岩特征联系

    代码分享:

    """# ----01 导入函数包-----"""
    import matplotlib
    import codecs
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib.collections import LineCollection
    from matplotlib.colors import ListedColormap, BoundaryNorm
    
    '''# ----02----定义函数--用于区分y=0上下的点----'''
    
    
    def threshold_plot(ax, x, y, threshv, color, overcolor):
        cmap = ListedColormap([color, overcolor])
        norm = BoundaryNorm([np.min(y), threshv, np.max(y)], cmap.N)
        points = np.array([x, y]).T.reshape(-1, 1, 2)
        segments = np.concatenate([points[:-1], points[1:]], axis=1)
        lc = LineCollection(segments, cmap=cmap, norm=norm)
        lc.set_array(y)
        ax.add_collection(lc)
        ax.set_xlim(np.min(x), np.max(x))
        ax.set_ylim(np.min(y) * 1.1, np.max(y) * 1.1)
        return lc
    
    
    '''# ----03----读取指数文件----'''
    f = codecs.open("D:\pycharm_work\program\\90_read_ocean_index_and_plot\\amo_index.txt",
                    mode='r')  # 打开txt文件
    year = []; amo_moth_1 = []
    for line in f.readlines()[28:]:
        a = line.split()
        a = [float(i) for i in a]
        year.append(a[0])  # 将其添加在year
        amo_moth_1.append(a[1])  # 将其添加在列表之中
        line = f.readline()
    f.close()
    '''# 02-1将list转换为np,可以画图。数组;'''
    b = []
    for i in range(len(year)):
        b.append(np.array(year[i]))
    year = np.array(b)
    b = []
    for i in range(len(amo_moth_1)):
        b.append(np.array(amo_moth_1[i]))
    amo_moth_1 = np.array(b)
    # ----数据处理----去除missing value----
    amo_moth_1[amo_moth_1 < - 999] = 0
    '''# 画图'''
    # ----01----读取颜色--后续使用-shallow_blue---cornflowerblue
    filename = 'D:\matlab_work\函数名为colormore的颜色索引表制作\R_color_txt\R_color_single\\deepskyblue.txt'
    file = open(filename, 'r')
    lines = file.readlines()
    file.close()
    data1 = []
    for line in lines:
        data1.append(float(line.strip()))
    cornflowerblue = np.array(data1)
    # ----01-1----shallow_red---
    filename = 'D:\matlab_work\函数名为colormore的颜色索引表制作\R_color_txt\R_color_single\\brown1.txt'
    file = open(filename, 'r')
    lines = file.readlines()
    file.close()
    data2 = []
    for line in lines:
        data2.append(float(line.strip()))
    brown = np.array(data2)
    # ----01-2----shallow_black---
    filename = 'D:\matlab_work\函数名为colormore的颜色索引表制作\R_color_txt\R_color_single\\lavenderblush4.txt'
    file = open(filename, 'r')
    lines = file.readlines()
    file.close()
    data2 = []
    for line in lines:
        data2.append(float(line.strip()))
    black = np.array(data2)
    # ----01-2----shallow_black---
    filename = 'D:\matlab_work\函数名为colormore的颜色索引表制作\R_color_txt\R_color_single\\gray10.txt'
    file = open(filename, 'r')
    lines = file.readlines()
    file.close()
    data2 = []
    for line in lines:
        data2.append(float(line.strip()))
    gray70 = np.array(data2)
    # ----01-4----shallow_black---
    filename = 'D:\matlab_work\函数名为colormore的颜色索引表制作\R_color_txt\R_color_single\\gray75.txt'
    file = open(filename, 'r')
    lines = file.readlines()
    file.close()
    data2 = []
    for line in lines:
        data2.append(float(line.strip()))
    gray90 = np.array(data2)
    # ----02----中文字体设置----
    matplotlib.rc("font", family='Microsoft YaHei', weight="bold")
    # 创建图形和坐标轴对象# 分辨率参数-dpi,画布大小参数-figsize
    fig, ax = plt.subplots(dpi=300, figsize=(3.8, 2.3))
    # ----03----绘制数组的折线图--颜色设置
    ax.plot(year, amo_moth_1, color=black / 256, marker='.', linestyle='-', linewidth=0.7, markersize=1)
    plt.axhline(y=0.0, color=gray90 / 256, linestyle='--', lw=0.5, zorder=0)  # y=0
    # ----04----绘制数组的散点图--颜色设置---
    ax.scatter(year, amo_moth_1, s=0.3, color=gray70 / 256, zorder=2)
    # ----05----设置散点分散--以y=0上下不同颜色设置。---
    below_threshold = amo_moth_1 < 0
    ax.scatter(year[below_threshold], amo_moth_1[below_threshold], s=3, color=cornflowerblue / 256, zorder=1)
    # ----Add above threshold markers
    above_threshold = np.logical_not(below_threshold)
    ax.scatter(year[above_threshold], amo_moth_1[above_threshold], s=3, color=brown / 256, zorder=1)
    # ----04----设置坐标轴标签  标签设置字体大小设置--坐标轴范围限制---
    plt.xlabel('年份', fontsize=5)
    plt.ylabel('AMO(index)', fontsize=5)
    plt.title('AMO(index)', fontsize=5)
    plt.xlim(1900, 2020)
    plt.ylim(-1, 1)
    # ----05----刻度设置及刻度值字体大小(分别设置x轴和y轴)
    plt.yticks(np.linspace(-1, 1, 5), fontsize=5, color='#000000')
    plt.xticks([1900, 1910, 1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990, 2000, 2010, 2020], fontsize=5, color='#000000')
    ax.tick_params("both", which='major', length=2, width=1.0, colors='k', direction='in')  # "y", 'x', 'both'
    # ----06----保存图像
    plt.savefig('amo_index_plot_scatter_0.jpg', dpi=600, bbox_inches='tight', pad_inches=0.1)  # 输出地图,并设置边框空白紧密
    plt.show()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
  • 相关阅读:
    【AI】如何在Pycharm中使用AI辅助Coding工具Aws Toolkit
    给文件添加可读可写可执行权限
    springboot之一:配置文件(内外部配置优先顺序+properties、xml、yaml基础语法+profile动态切换配置、激活方式)
    时钟有关概念汇总
    40+ Node.js 常见面试问题 [2024]
    需求工程方法的学习
    C++入门(以c为基础)——学习笔记2
    蓝牙智能营养电子秤解决方案
    Shell编程三剑客之sed
    【C语言】指针由浅入深全方位详解
  • 原文地址:https://blog.csdn.net/miaobo0/article/details/134282679