     else
       chrColor[i] = darkGray
 
+  botRyScale = d3.scale.linear()
+                 .domain([effMin, effMax])
+                 .range([pad.top+5, pad.top+hInner-5])
+
+  effectPlot = (chr, mar) ->
+    botsvg.selectAll(".effectplot").remove()
+    mean = []
+    lo = []
+    hi = []
+    male = []
+    for sex in ["Female", "Male"]
+      for g of data.effects[mar].Means
+        me = data.effects[mar].Means[g][sex]
+        se = data.effects[mar].SEs[g][sex]
+        if me isnt null
+          mean.push(me)
+          lo.push(me-se)
+          hi.push(me+se)
+          male.push(sex is "Male")
+     botRxScale = d3.scale.ordinal()
+         .domain(d3.range(mean.length))
+         .rangePoints([pad.left+botLw, pad.left+wInner], 1)
+     effplot = botsvg.append("g")
+
+     effplot.selectAll("empty")
+         .data(mean)
+         .enter()
+         .append("line")
+         .attr("class", "effectplot")
+         .attr("x1", (d,i) -> botRxScale(i))
+         .attr("x2", (d,i) -> botRxScale(i))
+         .attr("y1", (d,i) -> botRyScale(lo[i]))
+         .attr("y2", (d,i) -> botRyScale(hi[i]))
+         .attr("fill", "none")
+         .attr("stroke", "black")
+         .attr("stroke-width", "2")
+
+     effplot.selectAll("empty")
+         .data(mean)
+         .enter()
+         .append("circle")
+         .attr("class", "effectplot")
+         .attr("cx", (d,i) -> botRxScale(i))
+         .attr("cy", (d) -> botRyScale(d))
+         .attr("r", 6)
+         .attr("fill", (d,i) ->
+            return "blue" if male[i]
+            "red")
+         .attr("stroke", "black")
+         .attr("stroke-width", "2")
 
   # background rectangles for each chromosome, alternate color
   chrRect = topsvg.append("g").selectAll("empty")

        .attr("text-anchor", "middle")
        .text("")
        .attr("id", "botRtitle")

  # dots at markers
  dotsAtMarkers = (chr) ->

          .on "mouseout", (td) ->
                 d3.select(this).attr("opacity", markerClick[td])
          .on "click", (td) ->
                 pos = data.lod[chr].pos[data.markerindex[chr][td]]
                 title = "#{td} (chr #{chr}, #{onedig(pos)} cM)"
                 d3.select("text#botRtitle").text(title)
                 markerClick[lastMarker] = 0
                 d3.select("#circle#{lastMarker}").attr("opacity", 0).attr("fill",purple).attr("stroke","none")
                 lastMarker = td
                 markerClick[td] = 1
                 d3.select(this).attr("opacity", 1).attr("fill",pink).attr("stroke",purple)
                 effectPlot chr, td

  dotsAtMarkers(randomChr)

