I have graph below that was generated by the following code:
Also the data.xlsx has the matrix used below.
nodes = [];
new_matrix(:,1:2) = matrix(:,1:2);
for i = 1:1:size(matrix,1)
if matrix(i,4) <= 10000
nodes = [nodes,matrix(i,1:2)];
% new_matrix(i,1:2) = 0;
new_matrix(i,3) = 1;
else
% new_matrix(i,1:2) = 0;
new_matrix(i,3) = 0;
end
end
%
nodes_cellarray{:} = nodes;
set(figure, 'Visible', 'on');
G = graph(matrix(:,1),matrix(:,2));
plot_array = plot(G, 'layout', 'auto');
% plot_array.NodeColor = 'white';
highlight(plot_array,nodes_cellarray{:},'EdgeColor','r','NodeColor','red','LineWidth',4);
I get a graph plot as shown here:
I am aiming to color this graph such that it should look like the colorplot below:
This is a MATLAB generated plot from a research artcle.

댓글 수: 15

The bottom appears to be an colormapped image.
I am concerned that you might perhaps be getting confused about what "graph()" means to MATLAB. graph() in MATLAB is not a plot: it is a data entity in the "Graph Theory" sense of nodes and edges and paths. Graphs in the Graph Theory sense are abstract topological constructs, and have no inherent visual display and no inherent dimensionality. A Graph is not an image and a Graph is not a map.
Jay Vaidya
Jay Vaidya 2020년 1월 1일
Yes, I agree with what you explained. I also think that the bottom image is a color mapped image. But then how do I get there if I have data.xlsx. Is it possible by heatmap or colormap? I am running out of ideas being a beginner so it would be a great help if you suggest some ideas. Thanks. Happy new year :)
I have looked at the file. I cannot see any way that the data contained there could be turned into that plot.
No, I do not think that would be helpful.
If we interpret the first two columns to be coordinates, then there are three kinds of values in the file:
  1. values along the strict diagonal x = y
  2. values along the 52'nd diagonal, second column = first column + 51
  3. either of the above, but the data values are both exactly 65535
The only way I have been able to interpret the 65535 values is as indicating "missing data".
For most of the file, the missing-data values occur exactly 4 entries apart. This corresponds to broken 52'nd diagonal, with the pattern "value on main diagonal" then "value on diagonal 52 at same first coordinate", then "value on main diagonal at next coordinate", then "missing value on diagonal 52 at next coordinate".
With the main and 52'nd diagonal being exactly 1 and well seperated, there is no hope of getting the kind of graph you show at the bottom.
Heat map is not applicable to this situation because the coordinates are never exactly the same.
You might hypothesize that perhaps coordinates need to be grouped together, several in a row being binned together, but the problem with this hypothesis is that the two diagonals are strict, and any blocking would be the same thin region, except near the beginning of the file (pattern is slightly different in the beginning of the file.)
You could create connectivity graphs, but all they are going to show is the diagonal line for the main diagonal, and isolated unconnected dots on the 52'nd diagonal.
Jay Vaidya
Jay Vaidya 2020년 1월 3일
Oh, I see. I cannot believe that a question might be impossible to solve in MATLAB. So the reason I wanted to go to the color map is that it looks good for the paper. The graph you see is not something that is usually used in the paper. The problem that people have with this graph above is they say that the edges are squeezed while the nodes in the bulk are looking good. The squeezed edges do not make a physical sense in my project and to represent it this way would be a problem. Any alternatives to make this work? I mean at least to make the nodes at the edges uniformly spread as the bulk. Thank you so much for your explanations and support.
It would help if you were to document what the columns mean in the context of the paper.
Jay Vaidya
Jay Vaidya 2020년 1월 3일
Hi Mr. Bobrov,
I have attached a demonstration of what the color map means in the sense of graph. Please note the graph numbers that are there in the colormap and the graph. Thanks.
2.JPG
? Andrei Bobrov does not appear to have contributed to this topic (or you other closely related one) ?
This is starting to make more sense than it did before, and I am able to get a node plot, but I still don't see how to get anything close to that colormap graph.
Image Analyst
Image Analyst 2020년 1월 3일
First Robert (earlier today), now Bobrov. Apparently the community is trying to tell you that they think Robert or a nickname of Robert is what you should be called.
Jay Vaidya
Jay Vaidya 2020년 1월 3일
Thank you Mr. Roberson. It would be great if you share how the node plot looks like.
Jay Vaidya
Jay Vaidya 2020년 1월 4일
Mr. Roberson, these are similar looking color maps for the same thing from different papers (neglect rotation of images) just for reference. Do you think that there is some way out? Thanks.
1.JPG 2.JPG
3.JPG
Walter Roberson
Walter Roberson 2020년 1월 4일
편집: Walter Roberson 2020년 1월 4일
You have Node A as an integer, and given the node number and your numbering diagram, you can translate the node number into X and Y coordinates.
Likewise you have Node B that can be translated into X and Y coordinates.
But what does the Weight column convey ? You have an edge with finite value, and those edges are always either adjacent to each other horizontally or vertically, but what should be done with the weight value?
Like do the inf entries mark nucleation, and I should be plotting those as yellow instead of discarding them? If so then that would not agree with the pattern in the last part of the file, where every 4th entry is reliably inf.
Jay Vaidya
Jay Vaidya 2020년 1월 4일
Ok, so about the weight column:
Weight column: is the 4th column where we have weights to every possible edge.
(3rd column is useless so just ignore for the entire process)
Nucleation: The numbers in the 4th column that are lesser than 10k (10000) are to be marked as yellow and rest all to be red. So replying to your question, the inf and 65535 values will be always red. Nucleation here means the lower values weights (resistance in this context).
So, according to the weight value, the color of the nodes will be either one or the other. The color choice doesn't matter. But the selection rule will be if data(i,4) <= k where k=10k (in this case) then it will be one color and if not then the other. Red and yellow are just two good looking colors for the sake of graphics. The k value will also be an external input from my rest of the code so it's better than if it is a variable. Of course, k will decide the nucleation filament width and hence the yellow color in this colormap. There might be situations where nucleation looks like the image I sent and there might not be because I have sent you one of the hundreds data.xlsx file and some or many cans and cannot give the same color map. Does that clear the confusion?
Thanks!!!

댓글을 달려면 로그인하십시오.

 채택된 답변

Jay Vaidya
Jay Vaidya 2020년 1월 5일

0 개 추천

I wrote a for loop to convert the graph into a matrix that represents the weights of the edges.
See below (left: heatmap and the right one is the older graph)
clc
clear all
close all
% A= data imported
% A = xlsread('data.xlsx');
A = xlsread('matrix22.xlsx');
A(isnan(A)) = inf;
matrix = A;
nodes_x = 51;
nodes_y = nodes_x;
% A = A(:,:);
[r_A,c_A]= size(A); %getting row and column dimension of A
%max_A=max(A,[],2).'; %column vector of maximum node number to get max node number
%max_A(3)= max_A(4)= 0; %3,4 column is garbage
%max_A=max(max_A); %gives you the maximum node number
%dim_res= sqrt(max_A); %getting dimension of matrix C
dim_res=nodes_x;
B = zeros(r_A,4); % B will be the direction matrix ie B[;,1]= row number of each point B[;,2]= column number of each point B[;,3]= difference number of each point B[;,4]= weight value of each point
for i=1:r_A
B(i,1)=2*floor(A(i,1)/dim_res)+1; %row of each point cells are left to fill in edges
B(i,2)=2*mod(A(i,1),dim_res)+1; %column of each point cells are left to fill in edges
B(i,3)=A(i,2)-A(i,1); % direction vector of each point
B(i,4)=A(i,4);%assuming column 4 is the required column
end
C=zeros(101,99);
for i=1:r_A
if B(i,3)==1
C(B(i,1),B(i,2)+1)=B(i,4);% if the node is the next node, it should put the value in the adjacent cell in the same row
elseif B(i,3) == nodes_x
C(B(i,1)+1,B(i,2))=B(i,4);
end
end
%%
C(1,:) = [];
C(size(C,1)-1:size(C,1),:) = [];
C(:,1:2) = [];
%5 heatmap
h = heatmap(C,'Colormap', winter);
h.Colormap = parula;
h.ColorScaling = 'scaled';
h.ColorLimits = [0 10000];
h.GridVisible = 'off';
h.MissingDataColor = [0.8 0.8 0.8];
h.Title = 'Phase matrixs';
h.XLabel = '';
h.YLabel = '';
% caxis(h,[0 1]);
%% graph plot
%
nodes = [];
for i = 1:1:size(matrix,1)
if matrix(i,4) <= 10000
nodes = [nodes,matrix(i,1:2)];
end
end
nodes_cellarray{:} = nodes;
set(figure, 'Visible', 'on');
Graph = graph(matrix(:,1),matrix(:,2));
plot_array = plot(Graph, 'layout', 'auto');
highlight(plot_array,nodes_cellarray{:},'EdgeColor','r','NodeColor','r','LineWidth',4);
%

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Orange에 대해 자세히 알아보기

제품

릴리스

R2019b

질문:

2020년 1월 1일

답변:

2020년 1월 5일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by