Как сделать точечную диаграмму с пустыми кругами в Python?
в Python, с Matplotlib, как можно разбросать график с пустой круги будут построены? Цель состоит в том, чтобы нарисовать пустые круги вокруг некоторые из цветных дисков, уже нанесенных scatter()
, чтобы выделить их, в идеале-без необходимости перерисовки цветные круги.
пробовал facecolors=None
, но безрезультатно.
5 ответов:
С документация скаттера:
Optional kwargs control the Collection properties; in particular: edgecolors: The string ‘none’ to plot faces with no outlines facecolors: The string ‘none’ to plot unfilled outlines
попробуйте следующее:
import matplotlib.pyplot as plt import numpy as np x = np.random.randn(60) y = np.random.randn(60) plt.scatter(x, y, s=80, facecolors='none', edgecolors='r') plt.show()
Примечание: для других типов участков см. этот пост использование
markeredgecolor
иmarkerfacecolor
.
будут ли они работать?
plt.scatter(np.random.randn(100), np.random.randn(100), facecolors='none')
или с помощью plot ()
plt.plot(np.random.randn(100), np.random.randn(100), 'o', mfc='none')
вот еще один способ: это добавляет круг к текущим осям, сюжету или изображению или что-то еще :
from matplotlib.patches import Circle # $matplotlib/patches.py def circle( xy, radius, color="lightsteelblue", facecolor="none", alpha=1, ax=None ): """ add a circle to ax= or current axes """ # from .../pylab_examples/ellipse_demo.py e = Circle( xy=xy, radius=radius ) if ax is None: ax = pl.gca() # ax = subplot( 1,1,1 ) ax.add_artist(e) e.set_clip_box(ax.bbox) e.set_edgecolor( color ) e.set_facecolor( facecolor ) # "none" not None e.set_alpha( alpha )
(круги на картинке сжимаются до эллипсов, потому что
imshow aspect="auto"
).
в matplotlib 2.0 есть параметр под названием
fillstyle
что позволяет лучше контролировать заполнение маркеров на пути. В моем случае я использовал его с errorbars, но он работает для маркеров в целом http://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.errorbar.html
fillstyle
принимает следующие значения: ['full | / 'left' | 'right' | 'bottom’ |' top | / 'none']есть две важные вещи, чтобы иметь в виду при использовании
fillstyle
,1) Если mfc имеет любое значение, оно будет иметь приоритет, следовательно, если вы установили fillstyle в "none", он не вступит в силу. Поэтому избегайте использования mfc в сочетании с fillstyle
2) Вы можете управлять шириной края маркера (используя
markeredgewidth
илиmew
) потому что если маркер относительно мал и ширина края толстая, маркеры будут выглядеть заполненными, даже если они не являются.Ниже приведен пример использования errorbars:
myplot.errorbar(x=myXval, y=myYval, yerr=myYerrVal, fmt='o', fillstyle='none', ecolor='blue', mec='blue')
поэтому я предполагаю, что вы хотите выделить некоторые моменты, которые соответствуют определенным критериям. Вы можете использовать команду Prelude, чтобы сделать вторую точечную диаграмму высвеченных точек с пустым кругом и первым вызовом для построения всех точек. Убедитесь, что параметр s достаточно мал для больших пустых кругов, чтобы охватить меньшие заполненные.
другой вариант-не использовать scatter и рисовать патчи по отдельности с помощью команды circle/ellipse. Они находятся в matplotlib.патчи здесь есть некоторые примеры кода о том, как рисовать круги, прямоугольники и т. д.