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

点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

自言本是京城女,家在虾蟆陵下住。

大家好,我是皮皮。

一、前言

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

ade3fe25f0d41b814d02601927a77726.png

他的代码如下图所示:

acd3730f0e67abb532e12be0caa6a0e6.png

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

二、实现过程

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

567d39408da42da783bc1d933b49fd10.png
# -*- 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可视化的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【巭孬嫑勥烎】提问,感谢【E】、【瑜亮老师】、【kim】给出的思路和代码解析,感谢【莫生气】等人参与学习交流。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

52104b26f34900cd61f5cfb66b1cd125.png

大家在学习过程中如果有遇到问题,欢迎随时联系我解决(我的微信:pdcfighting1),应粉丝要求,我创建了一些高质量的Python付费学习交流群和付费接单群,欢迎大家加入我的Python学习交流群和接单群!

84766c652b0674d6e38d1bfecf886d0a.png

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

6dfb986508db55777567b6c3e5a43978.jpeg

------------------- End -------------------

往期精彩文章推荐:

37e0b99f8753929c9a312f613dbf3b95.png

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

猜你喜欢

转载自blog.csdn.net/pdcfighting/article/details/131714282
今日推荐