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()
效果图:

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

被折叠的 条评论
为什么被折叠?



