matplotlib scatter edge without specifying edgecolor

[亡魂溺海] 提交于 2019-11-27 16:14:36

There are two ways to produce empty or hollow scatter markers:

Setting facecolor to "none"

Instead of "just turning on" the edges, you may "turn off" the faces. So in order to make the facecolors of scatter markers transparent you may set the facecolor of the resulting PolyCollecton to "none".

sc = ax.scatter(...)
sc.set_facecolor("none")

This is different from sc = ax.scatter(x,y, c=x, facecolor="none"), because the c argument overwrites the facecolor.

Complete example:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,2*np.pi,20)
y = np.sin(x)

fig, ax=plt.subplots()
sc = ax.scatter(x,y, c=x, cmap="nipy_spectral")
sc.set_facecolor("none")

plt.show()

Using non-filled marker

A different option is to use a non-filled marker. This would have its facecolor only at the edge. An example may be marker="$\u25EF$" from the STIX font (also see this question)

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,2*np.pi,20)
y = np.sin(x)

fig, ax=plt.subplots()

sc = ax.scatter(x,y, c=x, marker="$\u25EF$", cmap="nipy_spectral")

plt.show()

Note: In python 2, you would need to use marker=ur"$\u25EF$" instead.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!