You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

plot_all_graphs.py 6.1 kB

5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Tue Jan 7 15:25:36 2020
  5. @author: ljia
  6. """
  7. # draw all the praphs
  8. import sys
  9. import pathlib
  10. sys.path.insert(0, "../../")
  11. import matplotlib.pyplot as plt
  12. import networkx as nx
  13. import numpy as np
  14. from gklearn.utils.graphfiles import loadDataset, loadGXL
  15. def main():
  16. # # monoterpenoides dataset.
  17. # dataset, y = loadDataset("../../datasets/monoterpenoides/dataset_10+.ds")
  18. # for idx in [12,22,29,74]:
  19. # print(idx)
  20. # print(nx.get_node_attributes(dataset[idx], 'atom'))
  21. # edge_labels = nx.get_edge_attributes(dataset[idx], 'bond_type')
  22. # print(edge_labels)
  23. # pos=nx.spring_layout(dataset[idx])
  24. # nx.draw(dataset[idx], pos, labels=nx.get_node_attributes(dataset[idx], 'atom'), with_labels=True)
  25. # edge_labels = nx.draw_networkx_edge_labels(dataset[idx], pos,
  26. # edge_labels=edge_labels,
  27. # font_color='pink')
  28. # plt.show()
  29. # # Fingerprint dataset.
  30. # dataset = '/media/ljia/DATA/research-repo/codes/Linlin/gedlib/data/collections/Fingerprint.xml'
  31. # graph_dir = '/media/ljia/DATA/research-repo/codes/Linlin/gedlib/data/datasets/Fingerprint/data/'
  32. # Gn, y_all = loadDataset(dataset, extra_params=graph_dir)
  33. ## dataset = '/media/ljia/DATA/research-repo/codes/Linlin/graphkit-learn/datasets/Fingerprint/Fingerprint_A.txt'
  34. ## Gn, y_all = loadDataset(dataset)
  35. #
  36. # idx_no_node = []
  37. # idx_no_edge = []
  38. # idx_no_both = []
  39. # for idx, G in enumerate(Gn):
  40. # if nx.number_of_nodes(G) == 0:
  41. # idx_no_node.append(idx)
  42. # if nx.number_of_edges(G) == 0:
  43. # idx_no_both.append(idx)
  44. # if nx.number_of_edges(G) == 0:
  45. # idx_no_edge.append(idx)
  46. ## file_prefix = '../results/graph_images/Fingerprint/' + G.graph['name']
  47. ## draw_Fingerprint_graph(Gn[idx], file_prefix=file_prefix, save=True)
  48. # print('nb_no_node: ', len(idx_no_node))
  49. # print('nb_no_edge: ', len(idx_no_edge))
  50. # print('nb_no_both: ', len(idx_no_both))
  51. # print('idx_no_node: ', idx_no_node)
  52. # print('idx_no_edge: ', idx_no_edge)
  53. # print('idx_no_both: ', idx_no_both)
  54. #
  55. # for idx in [0, 10, 100, 1000]:
  56. # print(idx)
  57. # print(Gn[idx].nodes(data=True))
  58. # print(Gn[idx].edges(data=True))
  59. # draw_Fingerprint_graph(Gn[idx], file_prefix='')
  60. # SYNTHETIC dataset.
  61. dataset = '/media/ljia/DATA/research-repo/codes/Linlin/graphkit-learn/datasets/SYNTHETICnew/SYNTHETICnew_A.txt'
  62. Gn, y_all = loadDataset(dataset)
  63. idx_no_node = []
  64. idx_no_edge = []
  65. idx_no_both = []
  66. for idx, G in enumerate(Gn):
  67. if nx.number_of_nodes(G) == 0:
  68. idx_no_node.append(idx)
  69. if nx.number_of_edges(G) == 0:
  70. idx_no_both.append(idx)
  71. if nx.number_of_edges(G) == 0:
  72. idx_no_edge.append(idx)
  73. # file_prefix = '../results/graph_images/SYNTHETIC/' + G.graph['name']
  74. # draw_SYNTHETIC_graph(Gn[idx], file_prefix=file_prefix, save=True)
  75. # draw_SYNTHETIC_graph(Gn[idx])
  76. print('nb_no_node: ', len(idx_no_node))
  77. print('nb_no_edge: ', len(idx_no_edge))
  78. print('nb_no_both: ', len(idx_no_both))
  79. print('idx_no_node: ', idx_no_node)
  80. print('idx_no_edge: ', idx_no_edge)
  81. print('idx_no_both: ', idx_no_both)
  82. for idx in [0, 10, 100]:
  83. print(idx)
  84. print(Gn[idx].nodes(data=True))
  85. print(Gn[idx].edges(data=True))
  86. draw_SYNTHETIC_graph(Gn[idx], save=None)
  87. def plot_a_graph(graph_filename):
  88. graph = loadGXL(graph_filename)
  89. print(nx.get_node_attributes(graph, 'atom'))
  90. edge_labels = nx.get_edge_attributes(graph, 'bond_type')
  91. print(edge_labels)
  92. pos=nx.spring_layout(graph)
  93. nx.draw(graph, pos, labels=nx.get_node_attributes(graph, 'atom'), with_labels=True)
  94. edge_labels = nx.draw_networkx_edge_labels(graph, pos,
  95. edge_labels=edge_labels,
  96. font_color='pink')
  97. plt.show()
  98. #Dessin median courrant
  99. def draw_Fingerprint_graph(graph, file_prefix=None, save=None):
  100. plt.figure()
  101. pos = {}
  102. for n in graph.nodes:
  103. pos[n] = np.array([float(graph.node[n]['x']), float(graph.node[n]['y'])])
  104. # set plot settings.
  105. max_x = np.max([p[0] for p in pos.values()]) if len(pos) > 0 else 10
  106. min_x = np.min([p[0] for p in pos.values()]) if len(pos) > 0 else 10
  107. max_y = np.max([p[1] for p in pos.values()]) if len(pos) > 0 else 10
  108. min_y = np.min([p[1] for p in pos.values()]) if len(pos) > 0 else 10
  109. padding_x = (max_x - min_x + 10) * 0.1
  110. padding_y = (max_y - min_y + 10) * 0.1
  111. range_x = max_x + padding_x - (min_x - padding_x)
  112. range_y = max_y + padding_y - (min_y - padding_y)
  113. if range_x > range_y:
  114. plt.xlim(min_x - padding_x, max_x + padding_x)
  115. plt.ylim(min_y - padding_y - (range_x - range_y) / 2,
  116. max_y + padding_y + (range_x - range_y) / 2)
  117. else:
  118. plt.xlim(min_x - padding_x - (range_y - range_x) / 2,
  119. max_x + padding_x + (range_y - range_x) / 2)
  120. plt.ylim(min_y - padding_y, max_y + padding_y)
  121. plt.gca().set_aspect('equal', adjustable='box')
  122. nx.draw_networkx(graph, pos)
  123. if save is not None:
  124. plt.savefig(file_prefix + '.eps', format='eps', dpi=300)
  125. else:
  126. plt.show()
  127. plt.clf()
  128. def draw_SYNTHETIC_graph(graph, file_prefix=None, save=None):
  129. plt.figure()
  130. nx.draw_networkx(graph)
  131. if save is not None:
  132. plt.savefig(file_prefix + '.eps', format='eps', dpi=300)
  133. else:
  134. plt.show()
  135. plt.clf()
  136. if __name__ == '__main__':
  137. main()
  138. # gfn = '/media/ljia/DATA/research-repo/codes/others/gedlib/tests_linlin/output/tmp_ged/set_median.gxl'
  139. # plot_a_graph(gfn)
  140. # gfn = '/media/ljia/DATA/research-repo/codes/others/gedlib/tests_linlin/output/tmp_ged/gen_median.gxl'
  141. # plot_a_graph(gfn)

A Python package for graph kernels, graph edit distances and graph pre-image problem.