Как сделать рассеиватель с пустыми кругами в Python?
-
30-09-2019 - |
Вопрос
В Python, с Matplotlib, как можно разбронировать сюжет пустой круги будут построены? Цель состоит в том, чтобы рисовать пустые круги вокруг немного цветных дисков, уже нанесенных scatter()
, Итак, чтобы выделить их, в идеале без необходимости перерисовать цветные круги.
Я старался facecolors=None
, но безрезультатно.
Решение
Из документация Для рассеяния:
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')
или используя участок ()
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
который позволяет лучше контролировать на пути заполнения маркеров. В моем случае я использовал его с помощью Crenverbars, но он работает для маркеров в целомhttp://matplotlib.org/api/_as_gen/matplotlib.axes.axes.eerrorbar.html.
fillstyle
принимает следующие значения: [«полный» | «Левый» | «правильно» | «дно» | «верх» | 'никто'
Есть два важных веща, чтобы иметь в виду, когда используете fillstyle
,
1) Если MFC установлен на любое значение, это примет приоритет, следовательно, если вы установили FillStyle на «Нет», это не вступит в силу. Поэтому избегайте использования MFC в сопряжении с FillStyle
2) Возможно, вы захотите контролировать ширину края маркера (используя markeredgewidth
или mew
) Потому что если маркер относительно небольшой, а ширина края толстая, маркеры будут выглядеть как заполненные, даже если они нет.
Ниже приведен пример с использованием CREARBARS:
myplot.errorbar(x=myXval, y=myYval, yerr=myYerrVal, fmt='o', fillstyle='none', ecolor='blue', mec='blue')
Поэтому я предполагаю, что вы хотите выделить некоторые очки, которые соответствуют определенным критериям. Вы можете использовать команду PRELUDE, чтобы сделать второй график разброса на высокие точки с пустым кругом и первым вызовом, чтобы построить все точки. Убедитесь, что параметр S достаточно маленький для больших пустых кругов, чтобы заключить меньшие заполненные.
Другой вариант - не использовать Scatter и нарисуйте патчи индивидуально, используя команду Circle / Ellipse. Это в matplotlib.patches, здесь Является ли какой-то пример код на том, как нарисовать круги прямоугольников и т. Д.