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 8.1 kB

5 years ago
5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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 matplotlib.pyplot as plt
  9. import networkx as nx
  10. import numpy as np
  11. from gklearn.utils.graphfiles import loadDataset, loadGXL
  12. def main():
  13. # MUTAG dataset.
  14. dataset, y = loadDataset("../../datasets/MUTAG/MUTAG_A.txt")
  15. for idx in [65]:#[6]:
  16. G = dataset[idx]
  17. for node in G.nodes:
  18. if G.nodes[node]['atom'] == '0':
  19. G.nodes[node]['atom'] = 'C'
  20. elif G.nodes[node]['atom'] == '1':
  21. G.nodes[node]['atom'] = 'N'
  22. elif G.nodes[node]['atom'] == '2':
  23. G.nodes[node]['atom'] = 'O'
  24. elif G.nodes[node]['atom'] == '3':
  25. G.nodes[node]['atom'] = 'F'
  26. elif G.nodes[node]['atom'] == '4':
  27. G.nodes[node]['atom'] = 'I'
  28. elif G.nodes[node]['atom'] == '5':
  29. G.nodes[node]['atom'] = 'Cl'
  30. elif G.nodes[node]['atom'] == '6':
  31. G.nodes[node]['atom'] = 'Br'
  32. ecolors = []
  33. for edge in G.edges:
  34. if G.edges[edge]['bond_type'] == '0':
  35. ecolors.append('orange')
  36. elif G.edges[edge]['bond_type'] == '1':
  37. ecolors.append('r')
  38. elif G.edges[edge]['bond_type'] == '2':
  39. ecolors.append('purple')
  40. elif G.edges[edge]['bond_type'] == '3':
  41. ecolors.append('orange')
  42. print(idx)
  43. print(nx.get_node_attributes(G, 'atom'))
  44. edge_labels = nx.get_edge_attributes(G, 'bond_type')
  45. print(edge_labels)
  46. pos=nx.spring_layout(G)
  47. nx.draw(G,
  48. pos,
  49. node_size=500,
  50. labels=nx.get_node_attributes(G, 'atom'),
  51. node_color='blue',
  52. font_color='w',
  53. edge_color=ecolors,
  54. width=3,
  55. with_labels=True)
  56. # edge_labels = nx.draw_networkx_edge_labels(G, pos,
  57. # edge_labels=edge_labels,
  58. # font_color='pink')
  59. plt.savefig('mol1_graph.svg', format='svg', dpi=300)
  60. plt.show()
  61. plt.clf()
  62. # # monoterpenoides dataset.
  63. # dataset, y = loadDataset("../../datasets/monoterpenoides/dataset_10+.ds")
  64. # for idx in [12,22,29,74]:
  65. # print(idx)
  66. # print(nx.get_node_attributes(dataset[idx], 'atom'))
  67. # edge_labels = nx.get_edge_attributes(dataset[idx], 'bond_type')
  68. # print(edge_labels)
  69. # pos=nx.spring_layout(dataset[idx])
  70. # nx.draw(dataset[idx], pos, labels=nx.get_node_attributes(dataset[idx], 'atom'), with_labels=True)
  71. # edge_labels = nx.draw_networkx_edge_labels(dataset[idx], pos,
  72. # edge_labels=edge_labels,
  73. # font_color='pink')
  74. # plt.show()
  75. # # Fingerprint dataset.
  76. # dataset = '/media/ljia/DATA/research-repo/codes/Linlin/gedlib/data/collections/Fingerprint.xml'
  77. # graph_dir = '/media/ljia/DATA/research-repo/codes/Linlin/gedlib/data/datasets/Fingerprint/data/'
  78. # Gn, y_all = loadDataset(dataset, extra_params=graph_dir)
  79. ## dataset = '/media/ljia/DATA/research-repo/codes/Linlin/graphkit-learn/datasets/Fingerprint/Fingerprint_A.txt'
  80. ## Gn, y_all = loadDataset(dataset)
  81. #
  82. # idx_no_node = []
  83. # idx_no_edge = []
  84. # idx_no_both = []
  85. # for idx, G in enumerate(Gn):
  86. # if nx.number_of_nodes(G) == 0:
  87. # idx_no_node.append(idx)
  88. # if nx.number_of_edges(G) == 0:
  89. # idx_no_both.append(idx)
  90. # if nx.number_of_edges(G) == 0:
  91. # idx_no_edge.append(idx)
  92. ## file_prefix = '../results/graph_images/Fingerprint/' + G.graph['name']
  93. ## draw_Fingerprint_graph(Gn[idx], file_prefix=file_prefix, save=True)
  94. # print('nb_no_node: ', len(idx_no_node))
  95. # print('nb_no_edge: ', len(idx_no_edge))
  96. # print('nb_no_both: ', len(idx_no_both))
  97. # print('idx_no_node: ', idx_no_node)
  98. # print('idx_no_edge: ', idx_no_edge)
  99. # print('idx_no_both: ', idx_no_both)
  100. #
  101. # for idx in [0, 10, 100, 1000]:
  102. # print(idx)
  103. # print(Gn[idx].nodes(data=True))
  104. # print(Gn[idx].edges(data=True))
  105. # draw_Fingerprint_graph(Gn[idx], file_prefix='')
  106. # # SYNTHETIC dataset.
  107. # dataset = '/media/ljia/DATA/research-repo/codes/Linlin/graphkit-learn/datasets/SYNTHETICnew/SYNTHETICnew_A.txt'
  108. # Gn, y_all = loadDataset(dataset)
  109. #
  110. # idx_no_node = []
  111. # idx_no_edge = []
  112. # idx_no_both = []
  113. # for idx, G in enumerate(Gn):
  114. # if nx.number_of_nodes(G) == 0:
  115. # idx_no_node.append(idx)
  116. # if nx.number_of_edges(G) == 0:
  117. # idx_no_both.append(idx)
  118. # if nx.number_of_edges(G) == 0:
  119. # idx_no_edge.append(idx)
  120. ## file_prefix = '../results/graph_images/SYNTHETIC/' + G.graph['name']
  121. ## draw_SYNTHETIC_graph(Gn[idx], file_prefix=file_prefix, save=True)
  122. ## draw_SYNTHETIC_graph(Gn[idx])
  123. # print('nb_no_node: ', len(idx_no_node))
  124. # print('nb_no_edge: ', len(idx_no_edge))
  125. # print('nb_no_both: ', len(idx_no_both))
  126. # print('idx_no_node: ', idx_no_node)
  127. # print('idx_no_edge: ', idx_no_edge)
  128. # print('idx_no_both: ', idx_no_both)
  129. #
  130. # for idx in [0, 10, 100]:
  131. # print(idx)
  132. # print(Gn[idx].nodes(data=True))
  133. # print(Gn[idx].edges(data=True))
  134. # draw_SYNTHETIC_graph(Gn[idx], save=None)
  135. def plot_a_graph(graph_filename):
  136. graph = loadGXL(graph_filename)
  137. print(nx.get_node_attributes(graph, 'atom'))
  138. edge_labels = nx.get_edge_attributes(graph, 'bond_type')
  139. print(edge_labels)
  140. pos=nx.spring_layout(graph)
  141. nx.draw(graph, pos, labels=nx.get_node_attributes(graph, 'atom'), with_labels=True)
  142. edge_labels = nx.draw_networkx_edge_labels(graph, pos,
  143. edge_labels=edge_labels,
  144. font_color='pink')
  145. plt.show()
  146. #Dessin median courrant
  147. def draw_Fingerprint_graph(graph, file_prefix=None, save=None):
  148. plt.figure()
  149. pos = {}
  150. for n in graph.nodes:
  151. pos[n] = np.array([float(graph.node[n]['x']), float(graph.node[n]['y'])])
  152. # set plot settings.
  153. max_x = np.max([p[0] for p in pos.values()]) if len(pos) > 0 else 10
  154. min_x = np.min([p[0] for p in pos.values()]) if len(pos) > 0 else 10
  155. max_y = np.max([p[1] for p in pos.values()]) if len(pos) > 0 else 10
  156. min_y = np.min([p[1] for p in pos.values()]) if len(pos) > 0 else 10
  157. padding_x = (max_x - min_x + 10) * 0.1
  158. padding_y = (max_y - min_y + 10) * 0.1
  159. range_x = max_x + padding_x - (min_x - padding_x)
  160. range_y = max_y + padding_y - (min_y - padding_y)
  161. if range_x > range_y:
  162. plt.xlim(min_x - padding_x, max_x + padding_x)
  163. plt.ylim(min_y - padding_y - (range_x - range_y) / 2,
  164. max_y + padding_y + (range_x - range_y) / 2)
  165. else:
  166. plt.xlim(min_x - padding_x - (range_y - range_x) / 2,
  167. max_x + padding_x + (range_y - range_x) / 2)
  168. plt.ylim(min_y - padding_y, max_y + padding_y)
  169. plt.gca().set_aspect('equal', adjustable='box')
  170. nx.draw_networkx(graph, pos)
  171. if save is not None:
  172. plt.savefig(file_prefix + '.eps', format='eps', dpi=300)
  173. else:
  174. plt.show()
  175. plt.clf()
  176. def draw_SYNTHETIC_graph(graph, file_prefix=None, save=None):
  177. plt.figure()
  178. nx.draw_networkx(graph)
  179. if save is not None:
  180. plt.savefig(file_prefix + '.eps', format='eps', dpi=300)
  181. else:
  182. plt.show()
  183. plt.clf()
  184. if __name__ == '__main__':
  185. main()
  186. # gfn = '/media/ljia/DATA/research-repo/codes/others/gedlib/tests_linlin/output/tmp_ged/set_median.gxl'
  187. # plot_a_graph(gfn)
  188. # gfn = '/media/ljia/DATA/research-repo/codes/others/gedlib/tests_linlin/output/tmp_ged/gen_median.gxl'
  189. # plot_a_graph(gfn)

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