Gephi 0.9.0
New features highlight
- Compatibility with Java 7 and 8 on all platforms
- Performance and memory-usage improvements thanks to a redesigned core
- New Appearance module that merges the Ranking and Partition modules
- New palette chooser and generator for partitions. The generator algorithm is designed to find the most suitable color palette
- Multi-graph support, it's now possible to import multiple edges with different relationship types between nodes
- Dynamic graphs can now be represented by a collection of timestamps, in addition of intervals
- Multiple graphs can be imported at the same time, typically a collection of graphs at different timestamps
Other new or improved features
- Auto-apply on dynamic partition (#606)
- Workspace selection as tabs (#1105)
- Add Applications shortcut in DMG file (#1117)
- Implement directional zoom (#1126)
- Add progress when taking screenshots (#1133)
- Add support for color names and hex/oct codes in importers (#1146)
- Add edge color parsing in GML importer (#1147)
- Add multiple files import support (#1150)
- GEXF 1.3 support for import/export (#1152)
- Add Import Spreadsheet option to File menu (#1155)
- Update ForceAtlas2 adaptive speed to better formula (#1158)
- Add Noverlap layout (#1161)
- Add OpenOrd layout (#1162)
- Add clear UI hook for mouse selection configuration panel (#1165)
- Bundle JRE in Mac OS App (#1170)
- Print application log to output window (#1171)
- Add copy to clipboard context menu on Import's report panel (#1182)
- Add new edge filter based on edge type (#1189)
- Add filter that keeps only nodes that have self-loop (#1203)
- Add import support for TGF graph format (#1240)
Removed features
- Remove hierarchical graphs support
- Remove support for 3D graph navigation
- Remove proprietary DB drivers (SQLServer, Teradata)
- Remove pie charts in context and partition modules
- Removed HITS statistics
- Removed Clustering module
Project file compatibility
The .gephi files created with Gephi 0.9.0 won't work on earlier versions as the format code has been redesigned. However, files from 0.8.2 and anterior can be opened by Gephi 0.9.0. Therefore, we advise not to overwrite your project files if you still plan to use earlier versions of Gephi.
Bugfixes
- graphml
edgedefault
not handled to spec (#147) - Misleading average edge weights in dynamic networks (#156)
- Color the edge with the opposite node color when selected in Overview (#292)
- ImportController.getFileImporter() should match importer name and extension (#319)
- DOT parser is broken (#320)
- Control Command on Mac (#327)
- Can't import two files on the same time (#338)
- Excessive Redrawing of windows Mac OS X (#401)
- Database edge list UI not remembering settings, and a validation error (#451)
- Partition colors generated at each workspace switch (#453)
- Colors in partition filter inconsistent with real partition colors Filters (#455)
- Freeze color mappings across graphs (#461)
- Partition not applicable after filtering (#471)
- Change filter button aspect to "Stop" when filtering is active Filters (#476)
- No way to reset workspace layout (#480)
- Picking a second partition colour does not bring up the colour picker, but changes the colour (#533)
- Edge filter reduces displayed thickness of UNfiltered edges (#538)
- Preview outputs margin automatic fitting (#572)
- Node label outlines offset in Preview (#654)
- Appending to exiting graph resets layout (#657)
- Export filter as a true/false column does nothing (#680)
- Reset size option/dialog should default to the current default node size (10.0?) and not 1.0 (#699)
- Catch blank nodes during CSV import (#723)
- NumberFormatException when loading dot file containing "[H,S,V]" colors (#739)
- Gephi isn't compatible with Java 7 and 8 on all platforms (Windows, Mac OS X, Linux) (#748)
- No way to filter out nodes that do not have a particular value? (#750)
- WTF: Gephi deletes my GML file (#757)
- Make partition colors persistent with the attribute column (#760)
- Incorrect average degree on directed graphs (#767)
- Add edge issue: node id not displayed in the GUI Data Laboratory (#782)
- UNION filter does not work (#809)
- Gephi hangs when applying degree filter (#813)
- Networkx gexf parser conflict with gephi (#818)
- Error and file deletion when importing non-gzipped .gexf files (#835)
- Error while exporting a graph as a GML file (#905)
- GDF import defaults to "directed" edge type, should be "undirected" (#906)
- Center on graph is not working on flat graph (#916)
- Cannot open graph files in /tmp (#918)
- Gephi generates invalid GML files (#919)
- File can't have repeated column names (#921)
- Gephi should be DPI-aware or offer a DPI setting (#961)
- Duplicate dynamic attribute value in GEFX causes Gephi to fail silently (#964)
- gephi shouldn't delete files when it can't open them (#1041)
- fail to parse valid DOT file if no node attribute present (#1053)
- Edge colors are unnecessarily dark (#1060)
- GraphML Importer doesn't recognize node attributes (#1084)
- Add icon to rename workspace action (#1104)
- Upgrade DBDrivers JDBC dependencies versions (#1115)
- Error when saving a project file if the file has been deleted (#1119)
- Gephi.app won't start from case-sensitive filesystem (#1144)
- ImportGML forces all columns to be string even though Double is parsed (#1151)
- Window title is truncated in some cases (#1156)
- Memory leak when closing projects (#1157)
- Control zoom so it can't move further than viewfield (#1159)
- Rectangle selection with ctrl key doesn't work on OS X (#1166)
- Filter duplicate doesn't properly clone properties (#1190)
- Support quoted attributes in DOT import (#1195)
- Color undirected edge with mixture of adjacent node colors in Overview (#1211)
- Preview display with retina display support (#1222)
- Make data laboratory refresh when the graph is filtered (#1238)
API Changes
- The functionalities of
DynamicAPI
have either been replaced by nativeGraphAPI
support or added to theTimelineAPI
, effectively removingDynamicAPI
from the codebase. TheTimeFormat
can be set viasetTimeFormat()
onGraphModel
. Estimators are now configurable per column and can directly be set from theColumn
. Obtaining the minimum time bounds can now be obtained from theTimeIndex
directly fromGraphModel
. - The
createQuery()
method inFilterController
now takes aFilterBuilder
instead of aFilter
. It allows to track down builders down to the query level. - The
ImportAPI
now supports importing multiple graphs at the time and supports graph slices through an additional parameter onContainerLoader
. ThesetTimestamp()
andsetInterval()
allows to define a point or period of existence for the entire graph. TheImportController
also allow multiple containers to be processed through a newprocess()
method. In parallel,ImporterUI
now takes multiple importers and so does theProcessor
interface that now takes multiple containers. - The
NodeFilter
andEdgeFilter
interfaces now inherit from a newElementFilter
so it's easier to create filters that work at the element level. - The
filter()
method inOperator
now takes an array ofSubgraph
instead ofGraph
. This gives access to operations such asunion
ornot
. - Remove
ClusteringAPI
from codebase. It needs a complete rewrite. - Add ability to configure timezone with
setTimeZone()
onContainerLoader
inImportAPI
. - Remove standalone
ContainerFactory
class inImportAPI
and replace it withContainer.Factory
. Also add the ability to configure theTimeRepresentation
inContainerLoader
. Finally, add color parsing utility inImportUtils
. It can be used to parse color names or codes. - The
AttributeModel
parameter in theexecute()
method ofStatistics
interface inStatisticsAPI
has been removed as all features are now inGraphModel
. - The
ChangeListener
inWorkspaceInformation
has been replaced with aPropertyChangeListener
. - Both
RankingAPI
andPartitionAPI
have been replaced by a newAppearanceAPI
, which supports both concepts. The SPI allows to createTransformer
services, which can support either ranking or partition transformations.Ranking
andPartition
instances are defined in the API and gives access to underlying data. The core concept in appearance are functions, which wrap the transformation entirely and can be accessed inAppearanceModel
. - The Processing dependency in
PreviewAPI
has been removed and replaced by regular Java2D. Therefore, theProcessingTarget
is now theG2DTarget
. Also add aresize()
method to facilitate integration. - Addition of a
EdgeWeightMergeStrategy
enum to control the way parallel edge weights are merged inImportAPI
. - Add ability to create
WorkspacePersistenceProvider
with a new SPI interface:WorkspaceBytesPersistenceProvider
. The XML-based interface has being renamed intoWorkspaceXMLPersistenceProvider
. - Importers can now use the
setValueString()
method onElementDraft
. This will automatically parse the value based on the declared type reducing parsing code on the importer side. If the type is already in the right type, use thesetValue()
instead. - Refactoring of the import API. Introduction of a
ColumnDraft
interface which represents a to-be-created column and the method to manipulate them inContainerLoader
. TheNodeDraft
andEdgeDraft
classes now inherits from a newElementDraft
, centralizing a lot of the code. TheEdgeDraftGetter
andNodeDraftGetter
have been removed and their methods moved directly to the node/edge draft. New elements are now created using theElementDraft.Factory
, which can be obtained with thefactory()
method onContainerLoader
. Previously theContainerUnloader
returned anAttributeModel
. This has been replaced with iterables over column drafts. TheEdgeDefault
enum becomesEdgeDiretionDefault
and represents a graph-level configuration. TheEdgeDefault
is now edge-level configuration and can be set bysetEdgeDirection()
onEdgeDraft
. Finally, convenientsetColor()
methods have been added toElementDraft
. - Complete rewrite of the
GraphAPI
and add GraphStore as dependency. The new API is entirely defined in the GraphStore project and Gephi makes it available through theGraphAPI
. TheAttributesAPI
functionalities have been consolidated into the new graph API and therefore has been removed. There is too many API changes to be listed all but notable ones are the following.- All attribute features (e.g. add column) are now directly accessible from the
GraphModel
, and there's no moreAttributeModel
. - The
AttributeColumn
is renamed intoColumn
, theAttributeTable
is renamed intoTable
,AttributeOrigin
is renamed intoOrigin
and theAttributeType
has been replaced by the direct usage ofClass
objects. Moreover, theAttributeUtils
is now entirely static (i.e. no more needed to obtain an instance) and has multiple important additions such as full parse support. - The support for hierarchical graphs has been removed, but multi-graph support added. Each edge now can have a relationship type, and is zero by default. These types can be associated with an arbitrary label object, which can be configured in
GraphModel.addEdgeType()
. - All node/edge data are now directly accessible from the interface. For instance, attribute values can be retrieved with the
getAttribute()
methods. All properties such as color or position are also accessible directly on the Node/Edge interfaces. - Dynamic graphs can now be represented with timestamps as well. Intervals are still supported but the API user must configure the preferred representation through the
Configuration
(must be done at initialization). The way elements' existence overtime has been greatly simplified with the addition of timestamp/interval management methods onElement
, which bothNode
andEdge
extends. See for instanceaddTimestamp()
,addInterval()
,getTimestamps()
orgetIntervals()
. Similarly, each attribute getter or setter inElement
is available with timestamps and intervals parameters so attribute values over time can be configured. Behind the scenes, the dynamic types used are defined inorg.gephi.graph.api.types
. - There's a new
Subgraph
interface that extendsGraph
and is available fromGraphModel.getGraph(GraphView)
. This subgraph interface has additional features such asunion()
orintersection()
. - The graph listening system with
GraphListener
has been entirely replaced with a pull-based system of observers. The system no longer sends events at each update but listeners can create observers, which periodically check if something has changed. There's multiple types of observers:GraphObserver
for topology changes,TableObserver
for new/removed columns andColumnObserver
for attribute value changes. These observers can obtain diff objects such asGraphDiff
orTableDiff
to exactly obtain what has changed.
- All attribute features (e.g. add column) are now directly accessible from the