IBivariateRenderer Interface (ArcObjects .NET 10.6 SDK)
ArcObjects Help for .NET developers > ArcObjects namespaces > Carto > ESRI.ArcGIS.Carto > Interfaces > IB > IBivariateRenderer Interface (ArcObjects .NET 10.6 SDK)
ArcObjects Library Reference (Carto)  

IBivariateRenderer Interface

Provides access to members that control the rendering of bivariate symbology based on two constiuent renderers.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.


This interface provides access to methods and properties of a renderer used to draw features based on two different attributes. Two separate renderers are assigned to represent these attributes. The first renderer assigned is a UniqueValueRenderer, and the second is a ClassBreaksRenderer.

See BiUniqueRenderer for more information about how IBivariateRenderer can be implemented. This renderer corresponds to the "Quanity by category" layer symbology option in ArcMap.


Name Description
Method CreateLegend Creates the legend. Call after all properties are set.
Read/write property MainRenderer Main renderer of a bivariate renderer.
Read/write property VariationRenderer Variation renderer of a bivariate renderer.

CoClasses that implement IBivariateRenderer

CoClasses and Classes Description
BiUniqueValueRenderer A bivariate renderer that combines a unique values renderer with a class breaks renderer (either graduated colors or graduated symbol type symbology).


MainRenderer must be set to a UniqueValueRenderer, and VariationRenderer must be a ClassBreaksRenderer.

The BiUniqueValueRenderer takes the symbol from the unique value renderer and alters either its size or color based on the symbol from the class breaks renderer. If the second renderer returns true for IClassBreaksRenderer::SymbolsAreGraduated, then the size will be altered, otherwise color will be altered. Hue will be maintained from the MainRenderer, but saturation and value will be taken from the VariationRenderer. See IHsvColor to learn more about hue, saturation, and value.

The VariationRenderer is typically set up with a symbol type that matches the MainRenderer, for example, marker symbols in the MainRenderer and marker symbols in the VariationRenderer. However, when rendering polygon features you can set up the VariationRenderer with marker symbols which will be drawn in the center of the polygon features. In this case, IClassBreaksRenderer::BackgroundSymbol applies from the VariationRenderer.

Call CreateLegend after initially setting up or making changes to and renderer properties. When the VariationRenderer is used to produce a graduated color representation, the renderer's legend consists of the combinatino of all possible values from the two renderers. When VariationRenderer is a graduated symbol type representation, then only the representative symbol colors and sizes are shown in the legend.

You should always keep in mind the multiplicative nature of bivariate rendering. When chosing a number of classes for both the MainRenderer and VariationRenderer, keep in mind that if they have 3 classes each that your map will have 9 classes of features. Maps with too many classes of features are hard to understand.

You can write your own custom renderer that does bivariate mapping, and it can implement IBivariateRenderer. Keep in mind though that the ArcMap user interface will expect that your renderer consist of a UniqueValueRenderer and a ClassBreaksRenderer. If implementing your own renderer it is good practice to implement a renderer property page so that users can set properties using a dialog, and also to identify your renderer uniquely by implementing a custom interface so that your property page is used to edit your renderer.

To learn more about writing a custom renderer property page and interface, see the library overview topic for the Carto library.