График рассеяния корреляционной матрицы с различным размером точки (в R) - PullRequest
5 голосов
/ 07 апреля 2010

Я только что получил крестик этот хороший код , который делает этот матричный график рассеяния:

альтернативный текст http://addictedtor.free.fr/graphiques/graphiques/graph_137.png

И хотел реализовать его в масштабе Ликретапеременные (целые числа от 1 до 5), из-за которых размеры / цвета точки (в нижнем треугольнике) различаются в зависимости от количества параметров этого типа (например, эффекта, который мог бы дать мне дрожание).

Любойидея о том, как это сделать на базовом механизме построения графиков?

Обновление:

Я сделал следующую функцию, но не знаю, как сделать так, чтобы масштаб точек всегда был "хорошим"что вы думаете?

panel.smooth2 <- function (x, y, col = par("col"), bg = NA, pch = par("pch"), 
                    cex = 1, col.smooth = "red", span = 2/3, iter = 3, ...) 
{
    require(reshape)
    z <- merge(data.frame(x,y), melt(table(x ,y)),sort =F)$value
    z <- z/ (4*max(z)) 

    symbols( x, y,  circles = z,#rep(0.1, length(x)), #sample(1:2, length(x), replace = T) ,
            inches=F, bg="blue", fg = bg, add = T)

    # points(x, y, pch = pch, col = col, bg = bg, cex = cex)
    ok <- is.finite(x) & is.finite(y)
    if (any(ok)) 
        lines(stats::lowess(x[ok], y[ok], f = span, iter = iter), 
            col = col.smooth, ...)
}



a1 <- sample(1:5, 100, replace = T)
a2 <- sample(1:5, 100, replace = T)
a3 <- sample(1:5, 100, replace = T)
aa <- data.frame(a1,a2,a3)


pairs(aa , lower.panel=panel.smooth2)

Ответы [ 2 ]

3 голосов
/ 07 апреля 2010

Вы можете использовать ' символы ' (аналогично методам 'lines', 'abline' и др.)

Этот метод даст вам детальный контроль над размером и цветом символов в одной строке кода.

Используя «символы», вы можете установить размер, цвет и форму символов. Форма и размер задаются путем передачи вектора для размера каждого символа и связывания его с «кругами», «квадратами», «прямоугольниками» или «звездами», например, «stars» = c (4, 3, 5, 1). Цвет устанавливается с помощью «bg» и / или «fg».

symbols( x, y, circles = circle_radii, inches=1/3, bg="blue", fg=NULL) 

Если я понимаю вторую часть вашего вопроса, вы хотите быть достаточно уверенным, что функция, которую вы используете для масштабирования символов на вашем графике, делает это осмысленным образом. Функция «символов» масштабирует (например) радиусы окружностей на основе значений в переменной 'z' (или столбце data.frame и т. Д.). В строке ниже я устанавливаю максимальный размер символа (радиус) как 1/3 дюйма - каждый символ, кроме самого большого, имеет радиус на несколько долей меньше, масштабируемый отношением значения этой точки к наибольшему значению. чем тот, в пропорции к Это хороший выбор? Я не знаю - мне кажется, что диаметр или окружность лучше. В любом случае, это тривиальное изменение. В итоге, символы с пропущенными кругами будут масштабировать радиусы символов пропорционально координате z - вероятно, лучше всего подходит для непрерывных переменных. Я бы использовал цвет ('bg') для дискретных переменных / факторов.

Один из способов использования «символов» состоит в том, чтобы вызвать функцию построения и передать type = 'n', который создает объект графика, но подавляет отрисовку символов, так что вы можете рисовать их с помощью функции «символы» далее.

Я бы не рекомендовал 'cex' для этой цели. «cex» - это масштабирующий коэффициент как для размера текста, так и для размера символов, но какой из этих двух элементов сюжета он влияет, зависит от того, когда вы передадите его - если вы установите его с помощью «par», то он действует на большую часть текста на участке; если вы установите его в функции plot, то это повлияет на размер символов.

2 голосов
/ 07 апреля 2010

Конечно, просто используйте cex:

set.seed(42)
DF <- data.frame(x=1:10, y=rnorm(10)*10, z=runif(10)*3) 
with(DF, plot(x, y, cex=z))

, что дает вам различные размеры круга. Цвет может быть просто четвертым измерением.

...