示例#1
0
	def plot( self, interval, font_fname=None ) :
		plt = Gnuplot()
		plt.open()

		cmds_at_second = self.group_commands_by_time()
		counts_at_second = self.count_player_actions( interval, cmds_at_second )
		# actions counted for that second...

		ts = [ t for t in range( len( counts_at_second ) ) ]
		apmss = self.make_apmss( interval, counts_at_second )
		#apmss[pid][t] = apm at time t, of player pid.

		plt.xlabel( "Time (s)" )
		plt.ylabel( "APM" )

		labels = []

		for i in range( self.nplayers ) :
			player = self.kwr.players[i]
			if not player.is_player() :
				continue

			plt.plot( ts, apmss[ i ] )
			name = sanitize_name( player, xor=True )
			labels.append( name )

		# touch up label of the curve

		# draw legend
		plt.legend( labels )

		avg_apms = self.calc_avg_apm( cmds_at_second )
		avg_apm_texts = self.avg_apm2txts( avg_apms )

		# draw peak arrow.
		self.draw_peak_labels( plt, apmss )

		# now the plot begins.
		plt.write( 'plot \\\n' ) # begin the plot command.

		color = 1
		for pid in range( self.nplayers ) :
			player = self.kwr.players[pid]
			if not player.is_player() :
				continue
			#name = sanitize_name( player, xor=True )
			#print( name, avg_apms[ pid ] )
			plt.write( "%f title \"%s\" linecolor %d linetype 0 linewidth 2, \\\n" % ( avg_apms[ pid ], avg_apm_texts[pid], color ) )
			color += 1

		plt.data_plot_command() # plot apm(player, t) data.

		plt.close()
示例#2
0
	def plot_unit_distribution( self ) :
		color = 1
		for i in range( self.nplayers ) :
			player = self.kwr.players[i]
			if not player.is_player() :
				continue

			plt = Gnuplot()
			plt.open()

			histo = self.units[ i ]

			plt.write( 'set style fill solid\n' )
			plt.write( 'set key off\n' )
			plt.write( 'set boxwidth 0.5\n' )
			plt.write( 'set title "%s"\n' % sanitize_name( player ) )

			n_kinds = len( histo )
			plt.write( 'set xrange[-1:%d]\n' % n_kinds )

			# set X tics, 45 degress rotated.
			cmd = "set xtics ("
			i = 0
			items = []
			for unit, cnt in histo.items() :
				items.append( '"%s" %d' % ( unit, i ) )
				i += 1
			cmd += ", ".join( items )
			cmd += ") rotate by 45 right\n"
			plt.write( cmd )

			# write values on the graph (labels)
			#i = 0
			#for unit, cnt in histo.items() :
			#	cmd = 'set label "%d" at %d,%d\n' % ( cnt, i, cnt+5 )
			#	plt.write( cmd )
			#	i += 1

			# y range, manually.
			max_cnt = 0
			for unit, cnt in histo.items() :
				max_cnt = max( max_cnt, cnt )
			print( max_cnt )
			plt.write( "set yrange [0:%f]\n" % ( 1.2*max_cnt ) )

			# feed data
			cmd = 'plot "-" using 0:1 with boxes linecolor %s, ' % color
			cmd += "'-' using 0:1:1 with labels offset 0, 1\n"
			plt.write( cmd )
			for unit, cnt in histo.items() :
				plt.write( str(cnt) + "\n" )
			plt.write( 'e\n' )
			for unit, cnt in histo.items() :
				plt.write( str(cnt) + "\n" )
			plt.write( 'e\n' )

			color += 1

			plt.close()