Style options, such as color, line thickness, and fonts, may be set at the global level (all Schemdraw Drawings), at the Drawing level, or on individual Elements.

Individual Elements

Element styling methods include color, fill, linewidth, and linestyle. If a style method is not called when creating an Element, its value is obtained from from the drawing or global defaults.

Color and fill parameters accept any named SVG color or a hex color string such as ‘#6A5ACD’. Linestyle parameters may be ‘-’, ‘–’, ‘:’, or ‘-.’.

# All elements are blue with lightgray fill unless specified otherwise
d = schemdraw.Drawing(color='blue', fill='lightgray')

d += elm.Diode()
d += elm.Diode().fill('red')        # Fill overrides drawing color here
d += elm.Resistor().fill('purple')  # Fill has no effect on non-closed elements
d += elm.RBox().linestyle('--').color('orange')
d += elm.Resistor().linewidth(5)

The label method also accepts color, font, and fontsize parameters, allowing labels with different style as their elements.

Drawing style

Styles may be applied to an entire drawing using the schemdraw.Drawing.config() method. These parameters include color, linewidth, font, fontsize, linestyle, fill, and background color. Additionally, the config method allows specification of the default 2-Terminal element length.

Global style

Styles may be applied to every new drawing created by Schemdraw (during the Python session) using schemdraw.config(), using the same arguments as the Drawing config method.

schemdraw.config(lw=1, font='serif')
with schemdraw.Drawing() as d:
    d += elm.Resistor().label('100KΩ')
    d += elm.Capacitor().down().label('0.1μF', loc='bottom')
    d += elm.Line().left()
    d += elm.Ground()
    d += elm.SourceV().up().label('10V')

Global Element Configuration

The can be used to configure styles on individual element classes that apply to all Drawings. It may be used, for example, to fill all Diode elements by default, without requiring the fill() method on every Diode instance.

Its argument is a dictionary of {name: Element} class pairs. Combined with functools.partial from the standard library, parameters to elements can be set globally. For example, the following code fills all Diode elements:

from functools import partial{'Diode': partial(elm.Diode, fill=True)})

with schemdraw.Drawing() as d:
    d += elm.Diode()
    d += elm.Diode()

Be careful, though, because the style method can overwrite existing elements in the namespace.

U.S. versus European Style

The main use of is to reconfigure elements in IEEE/U.S. style or IEC/European style. The schemdraw.elements.STYLE_IEC and schemdraw.elements.STYLE_IEEE are dictionaries for use in the style method to change configuration of various elements that use different standard symbols (resistor, variable resistor, photo resistor, etc.)

To configure IEC/European style, use the style method with the elm.STYLE_IEC dictionary.
d += elm.Resistor()
d += elm.Resistor()

To see all the elements that change between IEEE and IEC, see Styled Elements.


The font for label text may be set using the font parameter, either in the schemdraw.elements.Element.label() method for a single label, or in schemdraw.Drawing.config() to set the font for the entire drawing. The font parameter may be a string containing the name of a font installed in the system fonts path, a path to a TTF font file, or the name of a font family such as “serif” or “sans”. These font options apply whether working in the Matplotlib or SVG backends.

with schemdraw.Drawing() as d:
    # Default font
    d += elm.RBox().label('R1\n500K')

    # Named font in system fonts path
    d += elm.RBox().label('R1\n500K', font='Comic Sans MS')

    # Path to a TTF file
    d += elm.RBox().label('R1\n500K', font='Peralta-Regular.ttf')

    # Font family
    d += elm.RBox().label('R1\n500K', font='serif')
Font examples

For typesetting math expressions, the mathfont parameter is used. In the Matplotlib backend, a limited selection of math fonts are available. With the SVG backend in the path text mode, the mathfont parameter may be the path to any TTF file that contains a MATH table (requires Ziamath).

with schemdraw.Drawing(backend='svg') as d:
    # Default math font
    d += elm.RBox().label(r'$\sqrt{a^2+b^2}$').at((0, -2))

    # Path to a TTF file with MATH font table (SVG backend only)
    d += elm.RBox().label(r'$\sqrt{a^2+b^2}$', mathfont='Asana-Math.ttf')
Math font examples


Schemdraw also supports themeing, to enable dark mode, for example. The defined themes match those in the Jupyter Themes package:

  • default (black on white)

  • dark (white on black)

  • solarizedd

  • solarizedl

  • onedork

  • oceans16

  • monokai

  • gruvboxl

  • gruvboxd

  • grade3

  • chesterish

They are enabled using schemdraw.theme():

with schemdraw.Drawing() as d:
    d += elm.Resistor().label('100KΩ')
    d += elm.Capacitor().down().label('0.1μF', loc='bottom')
    d += elm.Line().left()
    d += elm.Ground()
    d += elm.SourceV().up().label('10V')