Matlab读取Excel数据并绘制三维网络拓扑图

本篇博客将介绍如何使用Matlab读取Excel文件中的坐标数据,并根据这些数据绘制三维网络拓扑图。

代码功能

  • 读取Excel文件中存储的网络节点坐标和连接关系数据。
  • 根据坐标信息绘制三维散点图,用不同颜色区分不同类型的节点(例如逻辑网络节点和物理网络节点)。
  • 根据连接关系数据,在网络节点之间绘制连接线,并标注连接线的长度信息。
  • 可以通过简单的修改代码,调整图形的显示样式,例如节点的大小、颜色、形状,连接线的颜色、线型等。

代码实现

% 设置文件名和sheet名
file = '混合表.xls';
sheet1 = 'Sheet1';
sheet2 = 'Sheet2';

% 读取第一个sheet内的坐标信息
[num1, txt1, raw1] = xlsread(file, sheet1);
x1 = num1(:, 1);
y1 = num1(:, 2);
z1 = num1(:, 3);
names1 = txt1(:, 4); % 假设第四列是点的名称

% 读取第二个sheet内的坐标信息
[num2, txt2, raw2] = xlsread(file, sheet2);
x2 = num2(:, 1);
y2 = num2(:, 2);
z2 = num2(:, 3);
names2 = txt2(:, 4); % 假设第四列是点的名称


% 绘制三维散点图
figure;
scatter3(x1, y1, z1, 'r', 'filled');
hold on;
scatter3(x2, y2, z2, 'b', 'filled');
xlabel('X');
ylabel('Y');
zlabel('Z');
title('网络空间负载配置图');
legend(sheet1, sheet2);
grid on;

% 绘制相同x和y坐标的点之间的虚线连接
for i = 1:length(x1)
    idx = find(x2 == x1(i) & y2 == y1(i));
    if ~isempty(idx)
        plot3([x1(i), x2(idx)], [y1(i), y2(idx)], [z1(i), z2(idx)], '--k');
    end
end

% 添加文本标签
for i = 1:length(x1)
    text(x1(i), y1(i), z1(i), names1{i}, 'Color', 'red', 'FontSize', 8);
end
for i = 1:length(x2)
    text(x2(i), y2(i), z2(i), names2{i}, 'Color', 'blue', 'FontSize', 8);
end

% 读取矩阵2的数据
matrix2 = xlsread('物理网络.xlsx');

% 连接z轴不为零的点
for i = 1:length(x2)
    for j = 1:length(x2)
        if matrix2(j, i) ~= 0
            % 计算两个点之间的线的长度
            length = sqrt((x2(i)-x2(j))^2 + (y2(i)-y2(j))^2 + (z2(i)-z2(j))^2);
            plot3([x2(i), x2(j)], [y2(i), y2(j)], [z2(i), z2(j)], '-b');
            
            % 添加文本标签
            text((x2(i)+x2(j))/2, (y2(i)+y2(j))/2, (z2(i)+z2(j))/2, num2str(length), 'Color', 'blue', 'FontSize', 8, 'HorizontalAlignment', 'center', 'VerticalAlignment', 'middle');
        end
    end
end

% 读取矩阵1的数据
matrix1 = xlsread('逻辑网络.xlsx');

% 连接z轴为零的点
for k = 1:length(x1)
    for l = 1:length(x1)
        if matrix1(k, l) ~= 0
            % 计算两个点之间的线的长度
            length = sqrt((x1(k)-x1(l))^2 + (y1(k)-y1(l))^2 + (z1(k)-z1(l))^2);
            plot3([x1(k), x1(l)], [y1(k), y1(l)], [z1(k), z1(l)], '-r');
            
            % 添加文本标签
            text((x1(k)+x1(l))/2, (y1(k)+y1(l))/2, (z1(k)+z1(l))/2, num2str(length), 'Color', 'red', 'FontSize', 8, 'HorizontalAlignment', 'center', 'VerticalAlignment', 'middle');
        end
    end
end

% 调整纵横比例
daspect([1, 1, 0.5]);

% 添加终止条件
stopFlag = false; % 初始化终止标志
while ~stopFlag
    % 检测键盘按键
    if kbhit
        key = getkey;
        if key == 27 % 'Esc'键
            stopFlag = true; % 设置终止标志
        end
    end
end

使用方法

  1. 将代码保存为.m文件,例如plot_network.m
  2. 将存储网络节点坐标和连接关系的Excel文件放到与代码文件相同的目录下。
  3. 在Matlab命令窗口中,输入plot_network并运行代码。

注意

  • 代码中假设Excel文件中的第一列为X坐标,第二列为Y坐标,第三列为Z坐标,第四列为节点名称。
  • 可以根据实际情况修改代码中的文件名、sheet名和列索引。
  • 可以根据需要修改代码中的绘图参数,例如节点的大小、颜色、形状,连接线的颜色、线型等。

希望这篇博客能够帮助你使用Matlab读取Excel数据并绘制三维网络拓扑图!

Matlab读取Excel数据并绘制三维网络拓扑图

原文地址: http://www.cveoy.top/t/topic/Ny8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录