电力系统用户数据的折线图绘制

一、读取excel文件
filename = '你的Excel文件名.xlsx'; % 替换为你的文件名
data = readtable(filename);

1. `filename`: 这是 Excel 文件的名称,需要你手动替换为实际的文件名。
2. `readtable(filename)`: 从 Excel 文件中读取数据并存储在一个表格格式的变量 `data` 中。`readtable` 函数会自动将 Excel 中的数据读取为一个 `table` 数据类型,这种类型方便后续的数据操作。

二、设置保存路径
output_folder = '你的输出文件夹路径'; % 替换为你想保存图像的文件夹路径
if ~exist(output_folder, 'dir')
    mkdir(output_folder);
end

1. `output_folder`: 指定图像保存的文件夹路径,需要替换为你想保存图像的实际路径。
2. `if ~exist(output_folder, 'dir')`: 检查指定的输出文件夹是否存在。
3. `mkdir(output_folder)`: 如果文件夹不存在,则创建该文件夹,以便后续保存图像。


三、获取所有用户编号
user_ids = unique(data{:, 1}); % 第一列是用户编号
num_users = length(user_ids);

1. `unique(data{:, 1})`: 提取第一列的用户编号,并去除重复值,得到所有唯一的用户编号。
2. `num_users`: 获取用户编号的总数,用于后续循环遍历。


四、 图形参数设置
plots_per_row = 5;               % 每行5个子图
plots_per_figure = 30;           % 每个大图包含30个子图
time_ticks = linspace(1, 96, 5); % 计算小时刻度(以5小时为间隔)
time_labels = {'0', '5', '10', '15', '20'}; % 时间刻度标签

1. `plots_per_row = 5`: 每行放置 5 个子图。
2. `plots_per_figure = 30`: 每张大图上显示 30 个子图。
3.`time_ticks = linspace(1, 96, 5)`: 生成 5 个横坐标刻度,范围为 1 到 96(一天内 96 个数据点)。
4. `time_labels = {'0', '5', '10', '15', '20'}`: 定义横坐标的标签,对应每 5 小时一个刻度。


五、 循环绘制每个用户的图
fig_num = 1; % 图编号
plot_num = 1; % 子图编号

1. `fig_num`: 记录当前大图的编号,用于图像文件命名。
2. `plot_num`: 记录当前大图中子图的编号,用于判断是否需要创建新图。

六、获取当前用户编号和数据
for user_index = 1:num_users
    
    user_id = user_ids(user_index);
    user_data = data(data{:, 1} == user_id, 7:end); % 从第7列开始是数据点


1. `for user_index = 1:num_users`: 循环遍历每一个用户。
2. `user_id = user_ids(user_index)`: 获取当前循环用户的编号。
3. `user_data = data(data{:, 1} == user_id, 7:end)`: 获取当前用户的数据,取第 7 列及之后的所有列(即 96 个数据点),这是用户每日的功率/容量数据。

   user_data_array = table2array(user_data);

4.将 table 转换为数组,适合绘图操作


 七、如果是新的一页,创建新图
  if plot_num == 1
        figure('Units', 'centimeters', 'Position', [0, 0, 20, 30]); % 设定图的大小
    end

1. `if plot_num == 1`: 当 `plot_num` 为 1 时,说明要开始创建新的一页大图。
2. `figure('Units', 'centimeters', 'Position', [0, 0, 20, 30])`: 创建一个新的图窗口,尺寸设置为 20cm x 30cm,以厘米为单位。

  八、 创建子图
subplot(ceil(plots_per_figure / plots_per_row), plots_per_row, plot_num);
    plot(user_data_array', 'LineWidth', 0.5);  % 使用数组进行绘图
    xlim([1, 96]);
    xticks(time_ticks);
    xticklabels(time_labels);
    xlabel('时间 (小时)');
    ylabel('功率');
    title(['用户编号:', num2str(user_id)]);
    grid on;

1. `subplot(ceil(plots_per_figure / plots_per_row), plots_per_row, plot_num)`: 在当前大图中创建子图,指定行数和列数,以及子图的顺序。
2. `plot(user_data_array', 'LineWidth', 0.5)`: 绘制当前用户的 365 天数据,每条线表示一天的数据。
3. `xlim([1, 96])`: 设置横坐标范围为 1 到 96。
4. `xticks(time_ticks)`: 设置横坐标刻度为 `time_ticks`,对应之前定义的小时刻度。
5. `xticklabels(time_labels)`: 设置横坐标的刻度标签。
6. `xlabel('时间 (小时)')` 和 `ylabel('功率')`: 设置横纵坐标的名称。
7. `title(['用户编号:', num2str(user_id)])`: 给子图添加标题,显示用户编号。
8. `grid on`: 显示网格线。

9.设置子图坐标轴字体大小为 6

 % 设置字体大小为 6
    set(gca, 'FontSize', 6);
    九、 更新子图编号
plot_num = plot_num + 1;

  十、当当前图包含30个子图或是最后一个用户时,保存图像 
if plot_num > plots_per_figure || user_index == num_users
        % 保存图像
        saveas(gcf, fullfile(output_folder, ['图像_', num2str(fig_num), '.png']));
        close(gcf);
        % 重置子图编号和增加图编号
        plot_num = 1;
        fig_num = fig_num + 1;
    end
end

1. `if plot_num > plots_per_figure || user_index == num_users`: 检查当前图是否已经包含 30 个子图或者是否处理到最后一个用户。
2. `saveas(gcf, fullfile(output_folder, ['图像_', num2str(fig_num), '.png']))`: 将当前大图保存为 PNG 格式,文件命名为 `图像_编号.png`。
3. `close(gcf)`: 关闭当前图窗口,释放内存。
4. `plot_num = 1` 和 `fig_num = fig_num + 1`: 重置子图编号,并增加大图编号,准备绘制下一张大图。

要在Matplotlib中绘制多组数据折线图,可以按照以下步骤进行操作: 1. 导入所需的库: ```python import matplotlib.pyplot as plt ``` 2. 准备数据: 假设有两组数据 `x1, y1` 和 `x2, y2`,可以将它们存储在列表或NumPy数组中。 ```python # 第一组数据 x1 = [1, 2, 3, 4, 5] y1 = [2, 4, 6, 8, 10] # 第二组数据 x2 = [1, 2, 3, 4, 5] y2 = [5, 4, 3, 2, 1] ``` 3. 创建图形对象和坐标轴对象: ```python fig, ax = plt.subplots() ``` 4. 绘制折线图: 使用`plot`函数分别绘制两组数据。 ```python # 绘制第一组数据折线图 ax.plot(x1, y1, label='Line 1') # 绘制第二组数据折线图 ax.plot(x2, y2, label='Line 2') ``` 5. 添加图例和标签: ```python # 添加图例 ax.legend() # 添加标题和坐标轴标签 ax.set_title('Multiple Line Plots') ax.set_xlabel('X-axis') ax.set_ylabel('Y-axis') ``` 6. 显示图形: ```python plt.show() ``` 完整的代码示例: ```python import matplotlib.pyplot as plt # 第一组数据 x1 = [1, 2, 3, 4, 5] y1 = [2, 4, 6, 8, 10] # 第二组数据 x2 = [1, 2, 3, 4, 5] y2 = [5, 4, 3, 2, 1] # 创建图形对象和坐标轴对象 fig, ax = plt.subplots() # 绘制折线图 ax.plot(x1, y1, label='Line 1') ax.plot(x2, y2, label='Line 2') # 添加图例 ax.legend() # 添加标题和坐标轴标签 ax.set_title('Multiple Line Plots') ax.set_xlabel('X-axis') ax.set_ylabel('Y-axis') # 显示图形 plt.show() ``` 这样就可以绘制多组数据折线图了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值