В документе pyplot для точечного графика:
matplotlib.pyplot.scatter(x, y, s=20, c='b', marker='o', cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None,
faceted=True, verts=None, hold=None, **kwargs)
Размер маркера
s: размер в пунктах ^ 2. Это скаляр или массив такой же длины, как x и y.
Что это за единица points^2
? Что это значит? Имеет ли в s=100
виду 10 pixel x 10 pixel
?
В основном я пытаюсь составить точечные диаграммы с разными размерами маркеров, и я хочу выяснить, что означает s
число.
s=20
значит размер маркера равен размеруfontsize=20
буквы?fontsize=20
буквы 20 пунктов (или что бы ни был символ ссылки в шрифте, высота 20 пунктов).matplotlib.pyplot.plot()
имеетms
параметр (markersize
) эквивалентныйmatplotlib.pyplot.scatter()
параметруs
(size
). Просто напоминание ..Ответы:
Это может быть несколько запутанным способом определения размера, но вы в основном указываете область маркера. Это означает, что для удвоения ширины (или высоты) маркера вам нужно увеличить
s
его в 4 раза. [Потому что A = W H => (2W) (2H) = 4A]Однако существует причина, по которой размер маркеров определяется таким образом. Из-за масштабирования области как квадрата ширины удвоение ширины фактически увеличивает размер более чем в 2 раза (фактически это увеличивает его в 4 раза). Чтобы увидеть это, рассмотрим следующие два примера и вывод, который они производят.
дает
Обратите внимание, как размер увеличивается очень быстро. Если вместо этого мы имеем
дает
Теперь видимый размер маркеров интуитивно увеличивается примерно линейно.
Что касается точного значения того, что такое «точка», то это довольно произвольно для целей построения графика, вы можете просто масштабировать все свои размеры на константу, пока они не будут выглядеть разумно.
Надеюсь это поможет!
Изменить: (В ответ на комментарий от @Emma)
Это, вероятно, сбивает с толку формулировку с моей стороны. Был задан вопрос о удвоении ширины круга, поэтому на первом рисунке для каждого круга (когда мы двигаемся слева направо) его ширина вдвое больше предыдущей, поэтому для области это экспонента с основанием 4. Аналогично второй пример каждый круг имеет площадь, в два раза превышающую последнюю, что дает экспоненту с основанием 2.
Однако это второй пример (где мы масштабируем область), когда удваивающаяся область кажется кругу, вдвое большему глазу. Таким образом, если мы хотим, чтобы круг казался фактором
n
больше, мы бы увеличили площадьn
не на радиус, а на видимый размер линейно пропорционально площади.Изменить, чтобы визуализировать комментарий @TomaszGandor:
Вот как это выглядит для разных функций размера маркера:
источник
s
значение в зависимости от размера окна рисунка? Я имею в виду, если мы максимизируем окна рисунков, я бы хотел иметь метки большего размера.4 ** n
и2 ** n
, ноn ** 4
иn ** 2
. Со2 ** n
вторым графиком не масштабируется линейно с точки зрения диаметра круга. Это все еще идет слишком быстро (только не слишком много).Поскольку другие ответы здесь утверждают, что
s
обозначает область маркера, я добавляю этот ответ, чтобы прояснить, что это не обязательно так.Размер в баллах ^ 2
Аргумент
s
вplt.scatter
обозначаетmarkersize**2
. Как сказано в документацииЭто можно воспринимать буквально. Чтобы получить маркер, который имеет x точек, вам нужно возвести это число в квадрат и дать его
s
аргументу.Таким образом, отношение между размером маркера линейного графика и аргументом размера разброса является квадратом. Для того, чтобы получить маркер рассеяния того же размера, что и маркер графика размером 10 точек, вы, следовательно, позвоните
scatter( .., s=100)
.Подключение к «области»
Так почему же другие ответы и даже документация говорят о «области», когда дело касается
s
параметра?Конечно, единицы очков ** 2 являются единицами площади.
marker="s"
площадь маркера действительно является непосредственно значениемs
параметра.area = pi/4*s
.Однако во всех случаях площадь маркера пропорциональна
s
параметру . Это мотивация называть это «областью», хотя в большинстве случаев это не совсем так.Указание размера маркеров рассеяния в терминах некоторой величины, которая пропорциональна площади маркера, в этом смысле имеет смысл, поскольку именно площадь маркера воспринимается при сравнении различных участков, а не длины или диаметра его стороны. Т.е. удвоение базового количества должно удвоить площадь маркера.
Какие очки?
Пока что ответ на вопрос, что означает размер маркера разброса, дан в единицах точек. Точки часто используются в типографии, где шрифты указаны в точках. Также ширина линий часто указывается в пунктах. Стандартный размер точек в matplotlib составляет 72 точки на дюйм (ppi) - следовательно, 1 точка составляет 1/72 дюйма.
Может быть полезно иметь возможность указывать размеры в пикселях вместо точек. Если значение dpi равно 72, одна точка - один пиксель. Если число точек на дюйм отличается (по умолчанию Matplotlib
fig.dpi=100
),Хотя размер маркера разброса в точках, следовательно, будет выглядеть по-разному для разных точек на дюйм, можно получить маркер 10 на 10 пикселей ^ 2, который всегда будет иметь одинаковое количество пикселей:
Если вас интересует разброс в единицах данных, проверьте этот ответ .
источник
Вы можете использовать размер маркера, чтобы указать размер круга в методе построения
От сюда
источник
Это площадь маркера. Я имею в виду , если у вас есть
s1 = 1000
и тоs2 = 4000
, соотношение между радиусом каждого круга:r_s2 = 2 * r_s1
. Смотрите следующий сюжет:У меня возникли те же сомнения, когда я увидел сообщение, поэтому я сделал этот пример, затем использовал линейку на экране для измерения радиусов.
источник
Я также попытался сначала использовать «разброс» для этой цели. После довольно много потерянного времени - я остановился на следующем решении.
Это основано на ответе на этот вопрос
источник
Если размер кружков соответствует квадрату параметра в
s=parameter
, то присвойте квадратный корень каждому элементу, который вы добавляете в массив размеров, например, такs=[1, 1.414, 1.73, 2.0, 2.24]
, что когда он принимает эти значения и возвращает их, их относительное увеличение размера будет квадратный корень квадратной прогрессии, который возвращает линейную прогрессию.Если бы я был на площадь каждого из них , как он получает выход к сюжету:
output=[1, 2, 3, 4, 5]
. Попробуйте интерпретацию списка:s=[numpy.sqrt(i) for i in s]
источник
i in output
не должно?