You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.7 KiB
76 lines
1.7 KiB
#! /usr/bin/env python
|
|
# coding=utf-8
|
|
|
|
# run without arguments for usage info
|
|
|
|
import re
|
|
import sys
|
|
import os
|
|
from optparse import OptionParser
|
|
import matplotlib as mpl
|
|
from mpl_toolkits.mplot3d import Axes3D
|
|
from matplotlib.axes import Axes
|
|
import matplotlib.pyplot as plt
|
|
from matplotlib.collections import PolyCollection
|
|
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
|
|
|
|
descr = "This Python script allows to visualise a 3D Pareto curve generated by PRISM."
|
|
parser = OptionParser(usage="usage: %prog input_file",version="alpha1 (2012-03-04)", description=descr)
|
|
(options, args) = parser.parse_args()
|
|
|
|
if len(args) != 1:
|
|
parser.print_help()
|
|
sys.exit(1)
|
|
|
|
#open input file
|
|
try :
|
|
file = open(args[0])
|
|
except IOError as e:
|
|
print "Cannot read the input file '" + e.filename + "': " + e.strerror >> sys.stderr
|
|
sys.exit(1)
|
|
|
|
col = []
|
|
maxX = 0;
|
|
maxY = 0;
|
|
maxZ = 0;
|
|
for line in file:
|
|
tile = []
|
|
coords = line.split(';')
|
|
for pointStr in coords:
|
|
point = pointStr.split(',')
|
|
x= float(point[0])
|
|
y= float(point[1])
|
|
maxX = x if (maxX < x) else maxX
|
|
maxY = y if (maxY < y) else maxY
|
|
if len(point) > 2:
|
|
z = float(point[2])
|
|
maxZ = z if (maxZ < z) else maxZ
|
|
vert = (x,y,z)
|
|
else:
|
|
vert = (x,y)
|
|
tile.append(vert)
|
|
col.append(tile)
|
|
|
|
mpl.rcParams['legend.fontsize'] = 10
|
|
|
|
fig = plt.figure()
|
|
fig.clf()
|
|
dim = len(col[0][0])
|
|
if dim == 3:
|
|
ax = fig.add_subplot(111, projection='3d')
|
|
poly = Poly3DCollection(col)
|
|
ax.add_collection3d(poly)
|
|
ax.set_zlabel("objective 3")
|
|
ax.set_zlim(0, maxZ * 1.1)
|
|
else:
|
|
ax = fig.add_subplot(111)
|
|
poly = PolyCollection(col)
|
|
ax.add_collection(poly)
|
|
|
|
ax.set_xlim(0, maxX * 1.1)
|
|
ax.set_ylim(0, maxY * 1.1)
|
|
ax.set_xlabel("objective 1")
|
|
ax.set_ylabel("objective 2")
|
|
|
|
plt.show()
|
|
plt.draw()
|