src/hg/instinct/hgHeatmap2/hgCircleMaps.c 1.10
1.10 2009/03/03 00:40:13 jsanborn
updated text color for dark median backgrounds
Index: src/hg/instinct/hgHeatmap2/hgCircleMaps.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/instinct/hgHeatmap2/hgCircleMaps.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -b -B -U 4 -r1.9 -r1.10
--- src/hg/instinct/hgHeatmap2/hgCircleMaps.c 2 Mar 2009 01:30:30 -0000 1.9
+++ src/hg/instinct/hgHeatmap2/hgCircleMaps.c 3 Mar 2009 00:40:13 -0000 1.10
@@ -68,8 +68,9 @@
boolean drawSummary; /* draw summary (pie chart) */
boolean subgrouped; /* if successful subgrouping applied */
+ Color bgColor; /* Background color (default = MG_WHITE) */
struct hash *data; /* data for center (pie chart) */
};
char *heatMapDbProfile = "localDb";
@@ -148,8 +149,9 @@
cm->drawSummary = FALSE;
cm->subgrouped = FALSE;
+cm->bgColor = MG_WHITE;
return cm;
}
struct ring *cloneRing(struct ring *rg)
@@ -454,12 +456,13 @@
double numSamples = (double) slCount(cm->samples);
int rStart = 0;
-int rStop = cm->minR;
+int rStop = cm->minR - 2;
cm->data = hashNew(0);
+int maxSamples = -1;
struct ring *rg;
for (rg = cm->rings; rg; rg = rg->next)
{
if (rg->numSamples == 0)
@@ -469,8 +472,16 @@
vgMakeColorGradient(vg, rg->zeroColor, rg->highColor, EXPR_DATA_SHADES, upShades);
vgMakeColorGradient(vg, rg->zeroColor, rg->lowColor, EXPR_DATA_SHADES, downShades);
+ valCol = getColor(rg->median, rg->gain, rg->maxDev, upShades, downShades);
+
+ if (rg->numSamples > maxSamples)
+ { /* Only set background color according to median color of largest subset */
+ maxSamples = rg->numSamples;
+ cm->bgColor = valCol;
+ }
+
double i = 0.0;
struct slName *sl;
for (sl = cm->samples; sl; sl = sl->next)
{
@@ -485,9 +496,8 @@
el = hashLookup(cm->data, sl->name);
if (el)
continue; // only save the first
- valCol = getColor(rg->median, rg->gain, rg->maxDev, upShades, downShades);
vgRadiusBox(vg, x0, y0, rStart, rStop, tStart, tStop, valCol);
hashAddInt(cm->data, sl->name, 1);
}
}
@@ -568,8 +578,18 @@
for (rg = cm->rings; rg; rg = rg->next)
drawRing(vg, cm, rg);
}
+void drawName(struct vGfx *vg, struct circleMap *cm)
+{
+Color textCol = vgContrastingColor(vg, cm->bgColor);
+
+/* Draw gene label in center */
+MgFont *font = mgSmallFont();
+if (mgFontStringWidth(font, cm->name) < cm->minR * 2.0)
+ vgTextCentered(vg, 0, 0, cm->width, cm->width, textCol, font, cm->name);
+}
+
void drawCircleMap(struct vGfx *vg, struct circleMap *cm)
{
if (!cm)
return;
@@ -577,12 +597,9 @@
if (cm->drawSummary)
drawCenter(vg, cm);
drawRings(vg, cm);
-/* Draw gene label in center */
-MgFont *font = mgSmallFont();
-if (mgFontStringWidth(font, cm->name) < cm->minR * 2.0)
- vgTextCentered(vg, 0, 0, cm->width, cm->width, MG_BLACK, font, cm->name);
+drawName(vg, cm);
}
char *circleMapGif(struct circleMap *cm)
/* Create genome GIF file and HT that includes it. */