python matplotlib 折线图 单y轴双y轴 加箭头文字注释

本文介绍了如何使用Python的matplotlib库创建单y轴和双y轴的折线图,并详细展示了如何在图上添加箭头及文字注释,帮助读者理解数据并增强图表的解释性。

1.单y轴:

'''
3年共计156周的环比折线图 (单y轴)
date:时间序列 x轴数据
week_156_list: y轴数据 5个邦的数据 类型: list
state_name:邦名 类型: list
img_save_url:图片保存路径
dry_list:干旱线 类型: list
'''
def show_156week_line_chart(date, week_156_list,state_name,img_save_url,dry_list):
    #根据state_name生成多张图
    for i in range(len(week_156_list)):
        # 设置图片宽高
        plt.rcParams['figure.figsize'] = (20.0, 10.0)
        # 设置保存图片分辨率
        plt.rcParams['savefig.dpi'] = 200
        plt.rcParams['figure.dpi'] = 200
        #  解决中文乱码问题
        plt.rcParams['font.sans-serif'] = ['Simhei']

        # 加背景颜色 写在括号里
        ax = plt.subplot()
        # 加网格横线 '-'为实线  '--'为虚线

        # 展示一条折线图 颜色 粗细 类型 标签
        plt.plot(date,week_156_list[i], color='#146091', linewidth=4, linestyle='-', label=u'蓄水指数')  # 引用画图库中的pyplot模块
        # 预警线 一条直线
        plt.plot(date,dry_list[i], color='#FF1234', linewidth=4, linestyle='--', label=u'干旱预警线')  # 引用画图库中的pyplot模块

        # 标签展示位置,数字代表标签具位置 1,2,3,4 位置从右上角开始
        plt.legend(loc=1,fontsize=20)
        # 定义图片title 字体大小
        ax.set_title(state_name[i] + u' 近3年周蓄水指数走势图',fontsize=40)
        # 定义x轴描述
        ax.set_xlabel(u' ',fontsize=25)
        # 定义y轴描述
        ax.set_ylabel(u'蓄水指数',fontsize=25)

        # x轴倾斜多少度 字体大小
        plt.xticks(rotation=90,fontsize=19)
        # y轴字体大小
        plt.yticks(fontsize=19)

        ax = plt.gca()
        # x轴 多少天为一个间隔
        ax.xaxis.set_major_locator(plt.MultipleLocator(30.0))
        # y轴 日期范围
        plt.xlim(datetime.date(2016, 8, 1), datetime.date(2019, 8, 30))


        # 保存到本地 去边框
        plt.savefig(img_save_url +state_name[i]+ u'近3年156周的环比折线图' + '.png', bbox_inches='tight', pad_inches=0.0)
        # 展示图
        plt.show()

效果:在这里插入图片描述

2.双y轴折线图:

'''
折线图 双y轴
印度主要产区种植面积和产量走势图 (加注释)
date:时间序列
x1:总产量 类型:list
y1:种植面积 类型:list
img_save_url:图片保存路径
'''
# 全印度 面积 / 产量走势图
def show_all_india(date,x1,y1,img_save_url):
        # 设置图片宽高
        plt.rcParams['figure.figsize'] = (20.0, 10.0)
        # 设置保存图片分辨率
        plt.rcParams['savefig.dpi'] = 200
        plt.rcParams['figure.dpi'] = 200
        #  解决中文乱码问题
        plt.rcParams['font.sans-serif'] = ['Simhei']

        fig, ax = plt.subplots()
        # 加背景颜色 括号后面
        ax = plt.subplot()
        # 加入 横虚线
        ax.yaxis.grid(True, linestyle='--')
        # 展示一条折线图 颜色 粗细 类型 标签
        ax2 = ax.twinx()
        # x轴倾斜90度
        plt.xticks(range(len(date)), date,rotation=90, fontsize=19)
        # 对应左y轴
        ax.plot(x1 ,'#5DA8FF', linewidth=4, linestyle='-', label=u'总产量')
        # 对应右y轴
        ax2.plot(y1, '#FF8355', linewidth=4, linestyle='-', label=u'种植面积')
        # Add some text for labels, title and custom x-axis tick labels, etc.
        # 面积label展示在左上角 对应左y轴
        ax.legend(loc=2,fontsize=20)
        # 变量label展示在右上角 对应右y轴
        ax2.legend(loc=1,fontsize=20)
        # 左y轴标签
        ax.set_ylabel(u'总产量',fontsize=25)
        # 右y轴标签
        ax2.set_ylabel(u'种植面积',fontsize=25)
        ax.set_xlabel(u'1990-2018年', fontsize=25)  # x轴标签
        ax.set_title(u'印度主要产区种植面积和产量走势图', fontsize=30)  # title
        for xtick in ax.get_xticklabels():
            # x轴旋转90
            xtick.set_rotation(90)
            # 设置x轴字体大小
            xtick.set_fontsize(20)
        for ytick in ax.get_yticklabels():
            # 设置左边y轴字体大小
            ytick.set_fontsize(20)
        for ytick1 in ax2.get_yticklabels():
            # 设置右边y轴字体大小
            ytick1.set_fontsize(20)
        fig.tight_layout()


        # plt.yticks(fontsize=29)


        # 加注释 xy 为箭头所在坐标 xytext为注释内容所在坐标  bbox为注释加边框 填充背景颜色
        plt.annotate(u'2002年干旱,波及17个邦383个地区',fontsize=20, xy=(11, 3400), xytext=(7, 3900), weight="bold", arrowprops=dict(facecolor='#5DA8FF'),rotation=15,bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='k',lw=1 ,alpha=0.4))
        plt.annotate(u'2004年干旱,波及9个邦的223个地区',fontsize=20, xy=(13, 2950), xytext=(9, 3450), weight="bold", arrowprops=dict(facecolor='#5DA8FF'),rotation=15,bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='k',lw=1 ,alpha=0.4))
        plt.annotate(u'2009年有15个邦的388个地区遭遇旱灾',fontsize=20, xy=(19, 3600), xytext=(15, 3200), weight="bold", arrowprops=dict(facecolor='#5DA8FF'),rotation=5,bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='k',lw=1 ,alpha=0.4))
        plt.annotate(u'2016年干旱,波及10个邦254个地区',fontsize=20, xy=(26, 3500), xytext=(21, 3400), weight="bold", arrowprops=dict(facecolor='#5DA8FF'),rotation=8,bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='k',lw=1 ,alpha=0.4))
        # 保存图片到指定路径
        plt.savefig(img_save_url + u'全印度走势图' + '.png', bbox_inches='tight', pad_inches=0.0)
        # 展示图
        plt.show()

效果图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值