python读取excel中数据并绘制多子图多组图在一张画布上

您所在的位置:网站首页 多组数据如何放到一个折线图里 python读取excel中数据并绘制多子图多组图在一张画布上

python读取excel中数据并绘制多子图多组图在一张画布上

2024-07-12 07:58| 来源: 网络整理| 查看: 265

Python的Matplotlib库是使用最广泛的数据可视化库之一,作为底层绘图工具,可定制性很强,。使用Matplotlib,可以使用各种图表类型绘制数据,包括折线图、条形图、饼图和散点图,可以绘制单个图表和绘制多个图表。

绘制单个图

在本专栏里面已详细说明单个图的绘制方法及图片的细节设计,点击链接直达:

Python折线图绘制|含有图片的详细设置

fig和axis的区别

fig, ax = plt.subplots(x,y,z)是比较正统的画法(参数x,y,z代表x行y列第z个图),指定figure和axes,然后对axes单独进行操作(图表元素增加和修改)

fig相当于是一个大的画布,ax相当于是小的子图,一个画布可以有一个或多个子图

绘制多个图形

        一旦知道怎么做,就可以绘制多个图了。同样,Matplotlib允许以网格的形式绘制多个图,可以通过一下函数解决

1.使用subplot()函数

2.使用subplots()函数

使用subplot()函数

要使用pyplot模块中的subplot()函数绘制多个绘图,需要执行两个步骤:

导入代码:

import matplotlib.pyplot as plt

首先,需要使用三个参数调用subplot()函数:(1)网格的行数,(2)网格的列数,以及(3)用于绘图的位置或轴,ax = plt.subplots(x,y,z),如:subplot(3,1,1)告诉Python解释器,下一个图应该绘制在包含3行和1列的网格中,并且该图应该出现在网格中的第一个位置(第1行,第1列)。绘图位置的顺序首先从左到右,然后从上到下。

在执行subplot()命令之后,只需调用要使用pyplot模块绘图的相应函数或图表类型。例如,下面的脚本使用plot()方法制作折线图,关键点已经说清楚了直接上代码:

完整代码 # -*- coding: utf-8 -*- """ Created on Sat May 6 11:35:21 2023 @author: ypzhao """ import pandas as pd import numpy as np import xlsxwriter as xw import matplotlib.pyplot as plt from PIL import Image excel = pd.read_excel("C:/Users/ypzhao/Desktop/电机数据/电机参数.xlsx") data = pd.DataFrame(excel) t = data['时间'] T1 = data['转矩1'] S1 = data['转速1'] P1 = data['功率1'] T2 = data['转矩2'] S2 = data['转速2'] P2 = data['功率2'] font = {'family': 'Times New Roman','size': 12} font_1 = {'family': 'Times New Roman','size': 16} # 画第1个图:转矩与时间关系图 fig, ax1 = plt.subplots(figsize=(12, 8),dpi=1200) ax1=fig.add_subplot(3,1,1) fig.tight_layout() ax1.plot(t,T1,marker = "",markersize=1,alpha=.8,color='y', linewidth=1,label='Control',markeredgecolor='green',) ax1.plot(t,T2,marker = "",markersize=1,alpha=.7, linewidth=1,label='Uncontrol',markeredgecolor='blue',) ax1.axis([0, 2100, -250, 750]) #X、Y轴区间 plt.tick_params(labelsize=14) labels = ax1.get_xticklabels() + ax1.get_yticklabels() [label.set_fontname('Times New Roman') for label in labels] plt.rcParams["font.family"] = "Times New Roman" #全图字号新罗马字体 plt.legend(ncol=2,frameon=False,prop=font) # 设置右和上边框是否可见 ax1.spines['right'].set_visible(False) ax1.spines['top'].set_visible(False) plt.xlabel('Times/s',font_1) plt.ylabel('Torque/N·m',font_1) # 画第2个图:转速与时间的关系图 ax2=fig.add_subplot(3,1,2) fig.tight_layout() ax2.plot(t,S1,marker = "",markersize=1,alpha=.8, linewidth=1,label='Control',markeredgecolor='lightgary',) ax2.plot(t,S2,marker = "",markersize=1,alpha=.4,color='g', linewidth=1,label='Uncontrol',markeredgecolor='maroon',) plt.tick_params(labelsize=14) labels = ax2.get_xticklabels() + ax2.get_yticklabels() [label.set_fontname('Times New Roman') for label in labels] plt.rcParams["font.family"] = "Times New Roman" #全图字号新罗马字体 plt.legend(ncol=2,frameon=False,prop=font) # 设置右和上边框是否可见 ax2.axis([0, 2100, 0, 3400]) #X、Y轴区间 ax2.spines['right'].set_visible(False) ax2.spines['top'].set_visible(False) plt.xlabel('Times/s',font_1) plt.ylabel('r/min',font_1) # 画第3个图:功率与时间的关系 ax3=fig.add_subplot(3,1,3) ax3 = plt.subplot(3,1,3) ax3.plot(t,P1,marker = "",markersize=1,alpha=.8, linewidth=1,label='Control',markeredgecolor='green',) ax3.plot(t,P2,marker = "",markersize=1,alpha=.8, linewidth=1,label='Uncontrol',markeredgecolor='blue',) ax3.axis([0, 2100, -50, 105]) #X、Y轴区间 plt.tick_params(labelsize=14) labels = ax3.get_xticklabels() + ax3.get_yticklabels() [label.set_fontname('Times New Roman') for label in labels] plt.rcParams["font.family"] = "Times New Roman" #全图字号新罗马字体 plt.legend(ncol=2,frameon=False,prop=font) # 设置右和上边框是否可见 ax3.spines['right'].set_visible(False) ax3.spines['top'].set_visible(False) plt.xlabel('Times/s',font_1) plt.ylabel('Power/kW',font_1) plt.savefig('电机数据.jpg',dpi=1200) #保存为图片png格式 plt.savefig('电机数据.png',dpi=1200) #保存为图片png格式 # file_path ='电机数据.jpg' # 获取图片大小 # img = Image.open(file_path) # imgSize = img.size #大小/尺寸 # w = img.width #图片的宽 # h = img.height #图片的高 # f = img.format #图像格式 # print(imgSize) # print(w, h, f) 运行结果 

源数据及代码领取链接:

Python多子图绘制数据及源代码



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3