R. Используйте частоту корреляции для задания размера точки на графике

#r #plot

#r #график

Вопрос:

Можно ли использовать частоту корреляции для установки значения cex на графике? например, с помощью mtcars. Корреляция между cyl и carb. таблица:

     cyl
carb 4 6 8
   1 5 2 0
   2 6 0 4
   3 0 0 3
   4 0 4 6
   6 0 1 0
   8 0 0 1
  

Как я могу использовать значения (например, 1 для 8 карбюраторов и 8 цилиндров), чтобы задать размер точек в R?

Код довольно прост (я только новичок)

 plot(mtcars$cyl, mtcars$carb,
    pch = 20,
    bty = "L",
    cex = what goes here????,
    col = carb.col[cyl],
    lines(lowess(cyl, carb),
    col = "red", lwd = 3)
)
  

Комментарии:

1. Как вы рисуете график? Вы строите корреляционную матрицу или что-то еще? Поделитесь своим кодом графика, и мы сможем помочь.

2. Код довольно прост ` plot (mtcars $ cyl, mtcars $ carb, pch = 20, bty = «L», cex = что здесь происходит ????, col = carb.col [cyl], lines(lowess(cyl, carb), col = «красный»,lwd = 3) ) `

3. Итак, вы хотите, чтобы размер точек соответствовал количеству автомобилей в точке?

4. да! 🙂 вот и все

Ответ №1:

Я бы предпочел ggplot , но вот base решение:

 dat = data.frame(with(mtcars, table(cyl, carb)))
dat = subset(dat, Freq > 0)
dat[] = lapply(dat, function(x) as.numeric(as.character(x)))

plot(dat$cyl, dat$carb,
    pch = 20,
    bty = "L",
    cex = dat$Freq,
    #col = carb.col[cyl],
    lines(lowess(mtcars$cyl, mtcars$carb),
    col = "red", lwd = 3)
)
  

введите описание изображения здесь

Если вы хотите использовать код в более общем плане, вы, вероятно, захотите масштабировать cex его, чтобы он имел максимальный размер…

Комментарии:

1. Хорошо, поэтому я должен использовать функцию для создания подмножества. Большое вам спасибо. Это просто великолепно! Так много нужно узнать! И мне также нужно изучить ggplot.

2. Да, plot на самом деле ничего не могу сделать, кроме того, что вы ему даете. Вам нужны размеры, основанные на подсчетах? Нужно рассчитать количество. Я бы настоятельно рекомендовал ggplot , однако, как только вы получите основные концепции, это будет намного проще и приятнее, чем base .

Ответ №2:

Вот полностью воспроизводимое решение ggplot:

 library(ggplot2)

ggplot(subset(reshape2::melt(table(mtcars$carb, mtcars$cyl)), value > 0))   
  geom_point(aes(Var1, Var2, size = value))   
  scale_y_continuous(breaks = c(4, 6, 8), name = "cyl")   
  scale_x_continuous(name = "carb")   
  scale_size(range = c(2, 8))  
  theme_bw()
  

введите описание изображения здесь

Комментарии:

1. Может быть неплохо отфильтровать значения 0.