Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multilayer Network Visualization. #282

Open
wants to merge 16 commits into
base: master-forge
Choose a base branch
from
Open

Conversation

JSiv
Copy link

@JSiv JSiv commented Oct 25, 2022

New plugin or plugin update?

  • New Plugin
  • Update

What is the purpose of this plugin?

Visualization of Multilayered/Multidimensional Networks

How to test the plugin in Gephi?

After Selecting the Plugin:

  1. Select a Layer ( Features of the network)
  2. Select a Layout Algorithm
  3. Set Distance between two layers.

If Layout Algorithm Selected is a Force Directed Algorithm

  1. Set Iterations, Speed, Gravity and Area(optional)

Split By Level

  1. True: Run the selected algorithm on whole network (only once before splitting the layer).
  2. False: Run the selected algorithm on each Layer.

More Details at https://arxiv.org/pdf/2209.03149.pdf

@mbastian mbastian self-requested a review November 3, 2022 09:42
Copy link
Member

@mbastian mbastian left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @JSiv and thanks for this new plugin, looks exciting.

My first comment is why did you copy all the existing layouts in your code? Why not just reuse the classes from the LayoutPlugin module?

@JSiv
Copy link
Author

JSiv commented Nov 6, 2022

Hi @JSiv and thanks for this new plugin, looks exciting.

My first comment is why did you copy all the existing layouts in your code? Why not just reuse the classes from the LayoutPlugin module?

Hi @mbastian ,

Thank you.

The layouts here is a slightly modified version of the original codes. For force directed layouts, I tried to modify the GraphModel API to pass only a selected no of nodes to the algorithm, but it didn't work, so i copied the existing layout code and modified it based on my needs. Also, I have added the files as separate (resulting in some redundant codes) in order to add the appropriate copyright licenses.

@mbastian
Copy link
Member

mbastian commented Nov 7, 2022

The layouts here is a slightly modified version of the original codes. For force directed layouts, I tried to modify the GraphModel API to pass only a selected no of nodes to the algorithm, but it didn't work, so i copied the existing layout code and modified it based on my needs. Also, I have added the files as separate (resulting in some redundant codes) in order to add the appropriate copyright licenses.

Thanks for the clarification. I'm not a fan of having this amount of code duplication. A bit of duplication is fine but here it's really a lot, even for a plugin. There must be another, more elegant way to achieve what you want. Can you be more specific on what you were trying to do but couldn't? Seems like running a layout on a subset of nodes was your intention?

@JSiv
Copy link
Author

JSiv commented Nov 13, 2022

Thanks for the clarification. I'm not a fan of having this amount of code duplication. A bit of duplication is fine but here it's really a lot, even for a plugin. There must be another, more elegant way to achieve what you want. Can you be more specific on what you were trying to do but couldn't? Seems like running a layout on a subset of nodes was your intention?

Hi @mbastian,

Yes, I was trying to pass a subset of nodes to the layout algorithm. Is there any way to do it?

@JSiv
Copy link
Author

JSiv commented Jan 13, 2023

Hi @mbastian

I've used NodePartitionFilter from org.gephi.filters.plugin to pass a subset of nodes to the layout algorithms and removed all the redundant codes.

Changes:
When the user wants to create a visualization based on the any edge properties (eg: label, weight), a new column is added to the node table named mviz_edge_*edge property*. From this newly created column , NodePartitionFilter is used to extract the subset of nodes (nodes which are connected by edges with same property). And if a node is connected by different edges with different properties, the node is only shown in the first layer (i.e only first property is taken into consideration). .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants