Я пытаюсь создать график с дискретной переменной по оси x и другой дискретной переменной по оси y, с точками, окрашенными в соответствии со средним значением val
и размером в соответствии с долей случаев в x
.
Данные выглядят так:
df1 <- data.frame(y=c("a","b","c","a","d","a","a","c","d","a","b","c","a","d","a","a","c","d","d","a","b","c","a","d","a","a","c","d"),
x=c("x","y","z","t","r","x","x","x","y","z","t","r","r","x","y","z","t","r","x","x","y","z","t","r","r","x","r","x"),
val=c(1,4,1,6,3,6,2,7,8,2,5,7,2,8,5,8,6,4,2,4,5,7,6,5,4,4,3,3))
Я пробовал с geom_count и со следующим:
ggplot(data = df1, aes(x=x, y=y, fill=val))+
stat_sum(aes(size=..prop.., group=x))+
scale_size_area(max_size = 10)
Но должны быть какие-то странные переопределения, о которых я не знаю. Реквизиты, созданные в параметре размера, неверны, как будто я удаляю переменную заполнения из графика, они разные. Может кто-нибудь мне помочь? Я тщательно изучил google, но я не нашел никаких решений.
Спасибо за ваш ответ, я действительно хочу представить среднее значение val
, и размер должен быть пропорцией случаев для каждого y
, сгруппированного по x
Одним из вариантов может быть вычисление количества, процентов и среднего значения заполнения за пределами ggplot
и использование geom_point
для построения агрегированных данных:
library(ggplot2)
library(dplyr)
df2 <- df1 |>
group_by(x, y) |>
summarise(n = n(), val = mean(val)) |>
mutate(pct = n / sum(n)) |>
ungroup()
#> `summarise()` has grouped output by 'x'. You can override using the `.groups`
#> argument.
ggplot(df2, aes(x, y, size = pct, fill = val)) +
geom_point(shape = 21) +
scale_size_area(max_size = 10)
Что вы на самом деле хотите показать в каждой точке (x, y)? Сумма
val
? Что должен показывать размер точки и что должен представлять цвет?fill
для точки будет отображаться только в том случае, если вы используете тип точки с заливкой, напримерshape = 21
.