前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用matplotlib在同一个画布显示20个 双y轴折线图

用matplotlib在同一个画布显示20个 双y轴折线图

作者头像
Python进阶者
发布2023-08-31 08:40:57
1930
发布2023-08-31 08:40:57
举报

一、前言

前几天在Python白银群【巭孬嫑勥烎】问了一个Python可视化的问题,这里拿出来给大家分享下。

他的代码如下图所示:

使用supblot分区作图确实可以迎刃而解。

二、实现过程

这里【E】给了一个思路,以4个图为例。

代码语言:javascript
复制
# -*- coding: UTF-8 -*-
# 开发时间:2023/3/12 14:57
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# names = ['01.12', '01.13', '01.14', '01.15', '01.16']
# x = range(len(names))
Data = pd.read_excel(r"H:\小论文\小论文\白城空气质量气象数据\空气质量数据\白城2015.10.26.xlsx")
X1 = Data.Date
Y1 = Data.AQI
Y2 = Data["PM2.5"]
Y3 = Data.PM10

# 创建两幅子图
f, ax = plt.subplots(4,1,figsize=(15, 10))
plt.subplots_adjust(wspace =0, hspace =0)

# 选择第一幅图
ax1 = plt.subplot(411)
figure_1 = plt.subplot(411)
# 设置y轴的范围
figure_1.set_ylim(bottom=0,top=520)
plt.plot(X1, Y1, color='black', marker='o',markeredgecolor="black",linewidth = 0.5,markerfacecolor="yellow", linestyle='-', label='AQI',markersize = 5)
figure_1.legend( ncol=1, frameon=False)
plt.ylabel("AQI")  # Y轴标签
# figure_1.axvline(Data.Date[47], color='red',linestyle = "-.")
# figure_1.axvline(Data.Date[58], color='red',linestyle = "-.")
plt.title("2015.10.26",loc = "center")

ax3 = figure_1.twinx()
ax3.plot(X1, Y2, color='black', marker='o',markeredgecolor="black",linewidth = 0.5,markerfacecolor="lime", linestyle='-', label='PM$_2$$_.$$_5$',markersize = 5)
ax3.plot(X1, Y3, color='black', marker='o',markeredgecolor="black",linewidth = 0.5,markerfacecolor="red", linestyle='-', label='PM$_1$$_0$',markersize = 5)
ax3.tick_params(axis='y', colors='black')
ax3.spines["right"].set_color("black")  # 修改右边颜色
ax3.legend(bbox_to_anchor=(0.92, 1),frameon=False,ncol=3,)  # 显示图例
plt.ylabel("PM$_2$$_.$$_5$/PM$_1$$_0$(${ug/m^3}$)")  # Y轴标签
# ax3.set_ylim(0,100)
ax3.set_ylim(bottom=0,top=800)
# plt.title("污染前",loc = "left")
# plt.title("污染前",x = 0.18,y = 1.05)
# plt.title("污染时",x = 0.5,y = 1.05)
# plt.title("污染后",loc = "right")
t1 = "污染前"
# plt.text(Data.Date[52], 500, t1, ha='left', rotation=15, wrap=True)

Y4 = Data.SO2
Y5= Data.CO
ax2 = plt.subplot(412)
figure_2 = ax[1]
# figure_2.axvline(Data.Date[47], color='red',linestyle = "-.")
# figure_2.axvline(Data.Date[58], color='red',linestyle = "-.")

figure_2.plot(X1, Y4, color='black', marker='o',markeredgecolor="black",linewidth = 0.5,markerfacecolor="aqua", linestyle='-', label='SO$_2$',markersize = 5)
plt.ylabel("SO$_2$(${ug/m^3}$)")  # Y轴标签
figure_2.legend(frameon=False)  # 显示图例
plt.xticks([]) # 不显示x 轴刻度
plt.rcParams['font.sans-serif']=['Microsoft YaHei']
# plt.title("污染后",x = 0.75,y = 2.05)
figure_2.set_ylim(bottom=0,top=70)



ax3 = figure_2.twinx()
ax3.plot(X1, Y5, color='black', marker='o',markeredgecolor="black",linewidth = 0.5,markerfacecolor="blue", linestyle='-', label='CO',markersize = 5)
ax3.tick_params(axis='y', colors='black')
ax3.spines["right"].set_color("black")  # 修改右边颜色
ax3.legend(bbox_to_anchor=(0.92, 0.99),frameon=False)  # 显示图例
plt.ylabel("CO(${ug/m^3}$)")  # Y轴标签
ax3.set_ylim(0,2.8)
# plt.title("污染时",x = 0.445,y = 2.05)
Y6 = Data.NO2
Y7 = Data.O3
# Data = pd.read_excel(r"G:\长春\长春20220201气象数据.xlsx")
Data = pd.read_excel(r"H:\小论文\小论文\白城空气质量气象数据\白城气象数据\白城2015.10.24-10.28.xlsx")

# X2 = Data.date

# 选择第一幅图
ax3 = plt.subplot(413)
figure_3 = plt.subplot(413)
# 设置y轴的范围
figure_3.set_ylim(bottom=0,top=88)
# figure_3.axvline(Data.date[47], color='red',linestyle = "-.")
# figure_3.axvline(Data.date[58], color='red',linestyle = "-.")
plt.plot(X1, Y6, color='black', marker='o',markeredgecolor="black",linewidth = 0.5,markerfacecolor="yellow", linestyle='-', label='NO$_2$',markersize = 5)
# figure_1.legend( ncol=1, frameon=False)
ax3.legend( bbox_to_anchor=(0.92, 1), frameon=False)
plt.ylabel("NO$_2$(${ug/m^3}$)")  # Y轴标签
plt.xticks()


ax3 = figure_3.twinx()
ax3.plot(X1, Y7, color='black', marker='o',markeredgecolor="black",linewidth = 0.5,markerfacecolor="lime", linestyle='-', label='O$_3$',markersize = 5)
ax3.tick_params(axis='y', colors='black')
ax3.spines["right"].set_color("black")  # 修改右边颜色
ax3.legend(bbox_to_anchor=(1, 1),frameon=False)  # 显示图例
plt.ylabel("O$_3$(${ug/m^3}$)")  # Y轴标签
# ax3.set_ylim(0,100)
ax3.set_ylim(bottom=0,top=119)


X3 = Data.date
Y8 = Data.温度
Y9= Data.相对湿度百分比
ax4 = plt.subplot(414)
figure_4 = ax[3]
# figure_4.axvline(Data.date[47], color='red',linestyle = "-.")
# figure_4.axvline(Data.date[58], color='red',linestyle = "-.")

figure_4.plot(X3, Y8, color='black', marker='o',markeredgecolor="black",linewidth = 0.5,markerfacecolor="blue", linestyle='-', label='温度',markersize = 5)
plt.ylabel("温度(℃)")  # Y轴标签
# plt.xlabel("X轴坐标")  # X轴标签
ax4.legend(bbox_to_anchor=(1, 1),frameon=False)  # 显示图例
plt.rcParams['font.sans-serif']=['Microsoft YaHei']
figure_4.set_ylim(bottom=-8,top=14)
# plt.xticks(np.arange(1,120,24),
#            rotation=45,
#            position=(0,0), #调整年份的位置,让远离了x轴
#            fontsize=9)


ax4 = figure_4.twinx()
ax4.plot(X1, Y9, color='black', marker='o',markeredgecolor="black",linewidth = 0.5,markerfacecolor="red", linestyle='-', label='湿度',markersize = 5)
ax4.tick_params(axis='y', colors='black')
ax4.spines["right"].set_color("black")  # 修改右边颜色
ax4.legend(bbox_to_anchor=(0.92, 1),frameon=False)  # 显示图例
plt.ylabel("湿度(%)")  # Y轴标签
ax4.set_ylim(0,99)


plt.show()
# plt.savefig(r'H:\小论文\小论文\折线图\白城20151026.png',format='png',dpi=500)

顺利地解决了粉丝的问题。作图的时候,有的错误很小,确实磨人,上次画图遇到个坑,显示的图那些线都要上天了,最后查了快一小时,才反应过来是数据没转为数值。

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Python可视化的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

往期精彩文章推荐:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫与数据挖掘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、实现过程
  • 三、总结
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档