LRP (ish)

From RoboWiki
Jump to: navigation, search

Green is survival, and so the X value is the average survival score of the enemy bot. The red and blue use enemy APS as the X value, not survival, and since survival scores are higher the green dots go further to the right.

I've actually thought about changing the X axis to just be enemy APS to make it easier to interpret. Or ordering the X-axis by rank instead of using APS values.

Skilgannon (talk)08:22, 19 November 2013

I've changed it so they all use APS on the X axis, so it should be clearer now.

Skilgannon (talk)10:03, 19 November 2013

I like new charts better and they are easier to understand. Thanks.

They are some white space on left and right, but I think it is ok since presentation is clearer now.

There is amasing correlation between APS and Survival in roborumble scores :)

Beaming (talk)13:51, 19 November 2013
 

Would it be a good idea, to make survival difference green on bot comparison charts? This way color scheme matches the main chart.

Beaming (talk)14:26, 19 November 2013

Done.

Skilgannon (talk)21:23, 19 November 2013

You do not have permission to edit this page, for the following reason:

The action you have requested is limited to users in the group: Users.


You can view and copy the source of this page:

Return to Thread:Talk:LiteRumble/LRP (ish)/reply (11).

Wow, sorry I missed these. The reason I use this green is because I just do a simple RGB 3-layer image, and set the different pixels manually. I would have to do a much more complex transform to get better colours. If you want to investigate my uber-messy code and provide a patch feel free =)

Skilgannon (talk)18:23, 18 November 2014

Hi Skilgannon,

I am not a plotting wizard but I plot enough in my life to make a fullish attempt to improve it a bit.

Though, it looks like the colors were chosen for the speed and not beauty, and it might be hard to have still fast yet beautiful output.

But I'll try to help. How can I look at the code?

Beaming (talk)02:12, 25 November 2014

Check here =)

Skilgannon (talk)09:48, 25 November 2014

Here is the suggested patch. Note that image array now created in uint8 RGB space, since resulting png image is in RGB space as well. As result it removes unnecessary image manipulation, after the array is prepared.

Beware, I was not able to fully test it since I am missing database and google modules. But it should work fine.

Note that colorAPSvsKNPBI is not used in this script but probably needed for another python script responsible for a given bot stats.

--- BotCompare.py	2014-09-15 15:40:19.000000000 -0400
+++ BotCompare.new.py	2014-11-26 22:28:50.000000000 -0500
@@ -266,28 +266,34 @@
                 
                 out.append("</td><td rowspan=\"7\">")
                 enemyScores = pickle.loads(zlib.decompress(rumble.ParticipantsScores))
+                # RGB color model
+                # Default colors
+                # colorSurvival = (0,255,0)
+                # colorAPS = (255,0,0)
+                # colorAPSvsKNPBI = (0,0,255)
+                # Colors suggested at 
+                # http://ksrowell.com/blog-visualizing-data/2012/02/02/optimal-colors-for-graphs/
+                colorSurvival = (62,150,81)
+                colorAPS = (204,37,41)
+                colorAPSvsKNPBI = (57,106,177)
                 size = 169
-                a = numpy.empty((size+1,size+1,4), dtype=numpy.float32)
+                a = numpy.empty((size+1,size+1,3), dtype=numpy.uint8)
                 a[...,(0,1,2)]=255
                 for cp in commonList:
                     eScore = enemyScores.get(cp.Name,None)
                     if eScore:
-                        a[max(0,min(size,size-int(round((cp.A_APS - cp.B_APS + 50)*0.01*size)))),
-                          int(round(eScore.APS*0.01*size)),(0)]=0
+                        x = int(round(eScore.APS*0.01*size))
+                        y = max(0,min(size,size-int(round((cp.A_APS - cp.B_APS + 50)*0.01*size))))
+                        a[x,y,(0,1,2)] = colorAPS
                         
-                        a[max(0,min(size,size-int(round((cp.A_Survival - cp.B_Survival + 50)*0.01*size)))),
-                          int(round(eScore.APS*0.01*size)),(1)]=0
+                        y = [max(0,min(size,size-int(round((cp.A_Survival - cp.B_Survival + 50)*0.01*size))))
+                        a[x,y,(0,1,2)] = colorSurvival
 #                        if eScore.ANPP > 0 and b.NPP >= 0:
  #                           a[size-int(round(b.NPP*0.01*size)),int(round(eScore.ANPP*0.01*size)),(0,1)]=0
                 
-                b = Image.fromarray(a.astype("uint8"), "CMYK")
-                c = cStringIO.StringIO()
-                b = b.convert("RGB")
-                a = numpy.array(b)
-                a[(a == (0,0,0)).all(axis=2)] = (255,255,255)
                 a[size - int(round(.5*size)),...] = 127
-                a
-                b = Image.fromarray(a,"RGB")
+                b = Image.fromarray(a.astype("uint8"),"RGB")
+                c = cStringIO.StringIO()
                 b.save(c,format="png")
                 d = c.getvalue()
                 c.close()

Beaming (talk)03:37, 27 November 2014
 

I'm very busy at the moment, but I'll take a look at this on the weekend.

Skilgannon (talk)07:03, 3 December 2014

No problem. I also made a pull request at the bitbucket to simplify import. This request is completely analogous to the presented here patch.

Beaming (talk)22:42, 3 December 2014

I've integrated your changes, with a few modifications of my own (just implementation details - averaging colours for multi-hit pixels). I also added it to the BotDetails page.

Skilgannon (talk)19:21, 5 December 2014

Skilgannon,

Thanks for taking the patch into the account.

It looks like you do some sort weighting for colors based on counts. But I am afraid my changes to the RGB color model are not very suitable for this task. Since the resulting color is hard to predict and decipher back to APS and Survival.

I would suggest a few things to avoid this:

  • (easiest) let single count take it all, chose either APS or Survival
  • (better in my opinion) make separate APS and Survival maps. The comparison table underneath is quite wide, we can easily fit 2 maps above. How to handle 3 maps in the bot details page is unclear for me.
  • (alternatively) enlarge X-size of the map and use point size as count indicator

I would suggest to increase size of the map and points in any case. The current 169x169 image is painfully small on modern displays. May be we should convert to the vector SVG format supported by modern browsers?

Beaming (talk)00:49, 6 December 2014
 
 
 
 
 
 
 
 

Sorry to be such a pain. But I have one more thought. May be APS as X axis is not such a good choice. Since in meleerumble there is white spaces on left and right. No bots have APS above 70% and below 10%.

Would it be better to use rating? Or may be ANPP? Those take full scale.

Beaming (talk)02:00, 20 November 2013

I use APS because it is stable and always available. ANPP is sometimes not available (just after stabilising, before batches have run). I could use rating, but that I feel is too closely fit to which other bots are in the rumble at the time of viewing, and I would prefer the image to be more stable for long-term comparison.

Skilgannon (talk)18:26, 18 November 2014
 
 
 
Personal tools