Thanks to some guidance from @Chris W, I have at least been able to come up with a way to make this multi-variate choropleth. It may not be the most elegant solution and I think there are some kinks to work out in terms of clarity. Still, I'll share the steps I took to make this multi-variate choropleth map.
The data I worked with was Scott County, KY precinct level data from the recent primary election for the position of family court judge. There were 3 candidates for the position. For simplicity, I'll call the candidates A, B, and C, respectively. There were 7 fields. 3 of the fields were raw numbers of votes for each candidate in each precinct. 3 more fields were the percentage of the total votes each candidate got in each precinct (A_perc, B _perc, C_perc). The 7th field was the total number of votes cast in for each precinct. I worked with the percentage data.
I looked between the 3 candidates and found that the maximum percentage of votes received in any precinct was ~55%; the minimum was ~8%. I created a classification scheme with a numeric code, 1-4, relating to each class:
1: < 10%
2: 10% - 29.99%
3: 30% - 49.99%
4: 50% +
I then made 3 new fields, one each for the class that the candidate's share of the votes fell into (i.e. A_class, B_class, C_class).
Using Select by Attribute I selected for each candidate those attributes that fell into each class. For example, selecting those precincts where A received less than 10% of the vote:
SELECT*FROM layer WHERE: "A_perc" < 10
Having selected the attributes meeting the desired classification criteria I used the Field Calculator to assign the class value for the candidate to their class field ONLY for those selected precincts. The field calculator expression looked like this:
A_class = 1
I repeated this for each candidate and class combination until all the candidate's results had been classified for each precinct.
I then created a new text field, TRIVar, to combine the classifications for each candidate. The combination was facilitated by the Field Calculator. Using the VB Script parser, the expression looked like this:
TRIVar = [A_class] & [B_class] & [C_class]
Essentially this concatenated the attribute values for the _class fields into a single attribute value. For example, where A_class = 3, B_class = 3, and C_class = 2 for a given precinct, TRIVar = 332.
We have 3 candidates and, conveniently enough, 3 primary colors with which to work. I assigned each candidate a primary color. A = red, B = green, C = blue. In choosing rgb colors, you have a value range of 0 - 255 for each color. As such, I divided the range of 0 - 255 among the 4 classes so that candidates classified as 4 would receive 255 of their assigned color or a 1 would receive 0. The color classification looked like this:
1: 0 (hex: 00)
2: 85 (hex: 55)
3: 170 (hex: aa)
4: 255 (hex: ff)
Following this scheme, a candidate where TRIVar = 332 would have be rgb(170,170,85), while 241 would be rgb(85,255,0). In this way, the candidates who got the most votes would have their color most prominently displayed while those with least votes would be down in the mix. In my data there were only 7 unique combination of classes, which I symbolized using the scheme described above. However, there are 64 3-digit combinations of 1-4. Given the classification scheme, many combination values with multiple 4s or multiple 1s and 2s are either implausible or impossible to have, but I went ahead and made a 4x4x4 color matrix of all the combinations:
I added this matrix as the legend. I made it as a Google Drawing and exported, sans-labels, as an image. I inserted the matrix into my mxd and did the labeling of the matrix from within Arc.
Below is the resulting map. I realize it's not quite up to cartographic snuff at the moment, but I did want to get this and my method up here as soon as I got this all to come together.
I think the classification method I used a fairly standard practice. While my scheme is certainly up for criticism, I'd especially like to hear thoughts on my color mixing method.
I'd welcome any ideas on how to make this map clearer to the reader. I think the color matrix, by virtue of being 3D on a 2D surface, is not immediately intuitive. I feel comfortable navigating it now, but I can imagine some difficulty for Joe Q. Public figuring out how to read the legend and relate it to the map (and vice-versa). In the draft I've posted, I've tried to be economical in my word usage, but I feel I've not struck a good balance. Either their is not enough text to make it clear how the viewer should read the map or I go into way too much detail.
Because this is just a quick draft, I'd like to stay away from nit-picky cartographic critiques. That said, any other suggestions and criticism are welcome.
Thanks again to Chris W for getting me pointed in the right direction on this.