2016-11-30 3 views
0

Я пытаюсь создать простой участок рассеяния. Для этой конкретной цели я хотел бы сосредоточить круги вокруг происхождения с разными цветами (например, яблочко с тремя областями). Интересно, если что-то похожее на axvspan и axhspan, но для концентрического затенения?Matplotlib концентрическое затенение (bullseye) в плане рассеяния?

Позвольте мне дать вам пример:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

x = x = np.linspace(0, 20, 50) 
y = np.cos(3*x) 


a = 3  # radius 0 to >a 
b = 5  # radius a to >b  
c = 7  # radius b to c 

plt.axvspan(a, b, color='r', alpha = 0.5) 
plt.axhspan(a, b, color='y', alpha = 0.5) 
plt.scatter(x, y) 
plt.show() 

Вместо горизонтальной и вертикальной штриховкой, я хочу концентрический зеленый затенение с радиусом a от начала координат, желтый от a до b и красный от b до c. Есть идеи?

+0

попробовать с моим решением – eyllanesc

ответ

1

Это мое решение:

import numpy as np 
import matplotlib.pyplot as plt 

fig, ax = plt.subplots() 

x = np.linspace(0, 20, 50) 
y = np.cos(3*x) 

a = 3  # radius 0 to >a 
b = 5  # radius a to >b 
c = 7  # radius b to c 


circle1 = plt.Circle((0, 0), a, color='green', alpha=0.3) 
circle2 = plt.Circle((0, 0), b, color='yellow', alpha=0.3) 
circle3 = plt.Circle((0, 0), c, color='red', alpha=0.3) 

ax.add_artist(circle3) 
ax.add_artist(circle2) 
ax.add_artist(circle1) 

plt.scatter(x, y) 
plt.axis([-22, 22, -22, 22]) 

plt.show() 

Выход:

enter image description here

+0

отличное решение! Спасибо! Как я могу решить разброс по кругам? Плюс: Можно ли использовать эллипсы? – Rachel

+0

@ Rachel Если бы я дал вам свой ответ, отметьте его как правильно. – eyllanesc

+0

Извините. Это произошло сейчас. Хотя я не думаю, что решение полностью верно, так как круги выше разброса - и это не диаграмма быка. – Rachel