Оскільки інші відповіді тут стверджують, що s
позначає область маркера, я додаю цю відповідь, щоб уточнити, що це не обов'язково.
Розмір у балах ^ 2
Аргумент s
в plt.scatter
Означає markersize**2
. Як йдеться в документації
s
: скалярний чи масив_подібний, форма (n,), необов'язковий
розмір у точках ^ 2. За замовчуванням - rcParams ['lines.markersize'] ** 2.
Це можна сприймати буквально. Для того, щоб отримати маркер, який має величину x балів, вам потрібно квадратне це число і надати його s
аргументу.
Отже, взаємозв'язок між розміром маркера лінійної лінії та аргументом розміру розкиду є квадратом. Для того, щоб отримати маркер розсіяння такого ж розміру, як маркер ділянки розміром 10 балів, ви б звідси подзвонили scatter( .., s=100)
.
import matplotlib.pyplot as plt
fig,ax = plt.subplots()
ax.plot([0],[0], marker="o", markersize=10)
ax.plot([0.07,0.93],[0,0], linewidth=10)
ax.scatter([1],[0], s=100)
ax.plot([0],[1], marker="o", markersize=22)
ax.plot([0.14,0.86],[1,1], linewidth=22)
ax.scatter([1],[1], s=22**2)
plt.show()
Підключення до "області"
То чому ж інші відповіді та навіть документація говорять про "область", коли мова йде про s
параметр?
Звичайно одиницями балів ** 2 є одиниці площі.
- Для окремого випадку квадратного маркера,
marker="s"
область маркера дійсно безпосередньо є значеннямs
параметра.
- Для кола - площа кола
area = pi/4*s
.
- Для інших маркерів може навіть не бути явного відношення до площі маркера.
Однак у всіх випадках площа маркера пропорційна s
параметру . Це мотивація називати це "областю", хоча в більшості випадків насправді це не так.
Визначення розміру маркерів розсіювання з точки зору деякої кількості, пропорційної площі маркера, має в цьому сенсі сенс, оскільки саме площа маркера сприймається при порівнянні різних пластирів, а не його бічна довжина чи діаметр. Тобто подвоєння базової кількості повинно подвоїти площу маркера.
Що таке бали?
Поки що відповідь на те, що означає розмір маркера розкидання, наведено в одиницях балів. Бали часто використовуються в типографії, де шрифти вказані в точках. Також частота ліній часто вказується в пунктах. Стандартний розмір балів у matplotlib - 72 бали на дюйм (ppi) - 1 бал, отже, 1/72 дюйма.
Можливо, буде корисно мати можливість вказувати розміри в пікселях замість очок. Якщо цифра dpi також 72, то одна точка - один піксель. Якщо цифра dpi відрізняється (значення за замовчуванням matplotlib fig.dpi=100
),
1 point == fig.dpi/72. pixels
Хоча розмір маркера розсіювання в точках, отже, виглядатиме різним для різних зображень у точці на дюйм, можна створити маркер 10 на 10 пікселів ^ 2, який завжди матиме однакову кількість пікселів:
import matplotlib.pyplot as plt
for dpi in [72,100,144]:
fig,ax = plt.subplots(figsize=(1.5,2), dpi=dpi)
ax.set_title("fig.dpi={}".format(dpi))
ax.set_ylim(-3,3)
ax.set_xlim(-2,2)
ax.scatter([0],[1], s=10**2,
marker="s", linewidth=0, label="100 points^2")
ax.scatter([1],[1], s=(10*72./fig.dpi)**2,
marker="s", linewidth=0, label="100 pixels^2")
ax.legend(loc=8,framealpha=1, fontsize=8)
fig.savefig("fig{}.png".format(dpi), bbox_inches="tight")
plt.show()
Якщо вас цікавить розкид у одиницях даних, перевірте цю відповідь .