Вопрос по ggplot2, plot, r, size – Разница между параметрами передачи в aes () и вне ее в ggplot2

6

После работы с параметрами размера точки в ggplot2 я заметил примеры, в которых размер передавался как внутри, так и внеaes() параметрgeom_point(), ОтСтраница geom_point () на сайте Хэдли:

p <- ggplot(mtcars, aes(wt, mpg))

# passed inside
p + geom_point(aes(size = qsec)) 
p + geom_point(aes(size = qsec)) + scale_area() 

# passed outside
p + geom_point(colour = "red", size = 3) 
p + geom_point(colour = "grey50", size = 4)

Я обнаружил, что они ведут себя по-разному, когда дело доходит до легенд. При прохождении внутриaes() Я могу заставить легенду появляться, хотя мне нужно устанавливать разрывы, даже если у меня есть только две точки разного размера; в противном случае я получаю диапазон из пяти пунктов, хотя используются только 2.

Кроме того, передаваемые размеры не являются понятными; Мне нужно указать относительный размер, используяrange=c(min,max) и установите разрывы только на два размера вместо пяти по умолчанию.

Если я передам размер за пределамиaes()размеры кажутся честными, но я не могу получить легенду на своем сюжете; Я старалсяscale_size, scale_size_continuous, а такжеscale_size_manual безуспешно.

Отgeom_point() на этой странице:

The following aesthetics can be used with geom_point. Aesthetics are mapped to variables in the data with the aes function: geom_point(aes(x = var))

...

Scales control how the variable is mapped to the aesthetic and are listed after each aesthetic.

[Listing of all the aesthetic options here (shape, colour, size, etc.)]

Исходя из этого, до сих пор не совсем ясно, как варианты (размер в этом вопросе, но это должно иметь значение для другой эстетики) внутри и снаружи.aes() повлиять на результат.

Ваш Ответ

1   ответ
9

Когда указано внутриaesЭстетическаяmapped к значению переменной в данных. Поскольку между данными и видимой эстетикой существует сопоставление, существует легенда, которая показывает это сопоставление. Внеaes позвони, эстетика простоset к конкретному значению. В показанных вами примерах размер (и цвет) установлены одинаково для всех точек. В этом случае нет необходимости в легенде, потому что размер (или цвет) не передает никакого значения (относительно базовых данных).

Проблема с легендой связана с тем, что размер отображается в непрерывную переменную. Бывает, что есть только два значения, которые эта переменная принимает в ваших данных, но в принципе непрерывная переменная может принимать любое значение. Если это действительно переменная выбора из двух, сделайте это фактором (либо в исходных данных, либо в эстетическом вызове).aes(size=factor(qsec)).

Понял. Мой конкретный случай, вероятно, связан с использованием двух вызововgeom_point() для двух разных наборов данных с одинаковыми уровнями общего фактора. Я хочу один набор в размере = n и другой в размере = m. Возможно, так как каждыйgeom_point() вызов видит только один статический размер, если я звоню за пределамиaes(), это не добавляет легенду? (Я упоминаю об этом, когда звоню на улицуaes() с определенным значением ... но так как два таких вызова сделаны с различными параметрами размера, естьis смысл в размерах. Hendy
Идиоматический способ сделать то, что вы хотите, - это поместить два набора данных в один data.frame с новым столбцом, который идентифицирует, из какого набора он пришел. Тогда размер может быть сопоставлен с этой переменной, иscale_size_manual может быть использован для установки размеров, которые вы хотите. Кроме того, вы можете назначить размер строковой константе (aes(size="set1") для одного,aes(size="set2") для другого), а затем использоватьscale_size_manual сопоставить эти разрывы с конкретными метками и размерами (values). Смотрите, например,stackoverflow.com/q/11159072/892313

Похожие вопросы