matplotlib custom markers

matplotlib, python

Solution

Using `text`, you can use any character available in your fonts. You need to iterate through them yourself though, and I don't think that you can get continuous control over their linewidth (though, of course, you can select 'bold', etc, if available).

from numpy import *
import matplotlib.pyplot as plt

symbols = [u'\u2B21', u'\u263A', u'\u29C6', u'\u2B14', u'\u2B1A', u'\u25A6', u'\u229E', u'\u22A0', u'\u22A1', u'\u20DF']

x = arange(10.)
y = arange(10.)

plt.figure()
for i, symbol in enumerate(symbols):
    y2 = y + 4*i
    plt.plot(x, y2, 'g')
    for x0, y0 in zip(x, y2):
        plt.text(x0, y0, symbol, fontname='STIXGeneral', size=30, va='center', ha='center', clip_on=True)

plt.show()

You can also use `plot` directly, though the rendering doesn't look quite as good and you don't have quite as much control over the characters.

plt.figure()
for i, symbol in enumerate(symbols):
    y2 = y + 4*i
    plt.plot(x, y2, 'g')
    marker = "$%s$" % symbol
    plt.plot(x, y2, 'k', marker=marker, markersize=30)

Problem

I would like markers such as empty squares with +, or x, or ., or anything inside with adjustable thickness; In fact the ones like in Origin. It seems that it needs customisation. code example: ``` import numpy as np import matplotlib.pyplot as plt plt.plot(np.arange(10) ** 2, 'k-', marker = 's', mfc = 'none', lw = 2, mew = 2, ms = 20) plt.show() ```

Original source