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.2 kB

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

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