Соотношение рассеиваний-матричный график с разным размером точки (в R)

StackOverflow https://stackoverflow.com/questions/2593643

  •  25-09-2019
  •  | 
  •  

Вопрос

Я просто пришел крест Этот хороший код Это делает этот график Scatter Matrix:

alt text
(источник: Free.fr.)

И хотел реализовать его в переменные шкалы жидкости (целые числа от 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)
Это было полезно?

Решение

Вы можете использовать 'символы«(аналогично линиям методов», «ALLINE» et al.)

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

Используя «символы», вы можете установить размер символа, цвет и форму символа. Форма и размер устанавливаются путем прохождения в векторе для размера каждого символа и привязка его к «кругам», «квадратам», «прямоугольникам» или «звездам», например, «звезды» = C (4, 3, 5, 1). Цвет устанавливается с «BG» и / или «FG».

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

Если я понимаю вторую часть вашего вопроса, вы хотите быть разумно уверены, что функция, которую вы используете для масштабирования символов на вашем участке, делает это значимым образом. Функция «Символы» (например,) радиус кругов на основе значений в переменной «Z» (или данные. Crame Column и т. Д.) В строке ниже я устанавливаю максимальный размер символа (радиус) как 1/3 дюйма - каждый символ, за исключением наибольшего имеет Радиус некоторая фракция меньше, масштабируется по соотношению значения точка DAT на наибольшее значение. чем это пропорционально, это хороший выбор? Я не знаю - мне кажется, что диаметр или особенно окружность могут быть лучше. В любом случае это тривиальное изменение. В сумме «символы» с «кругами» проходили в рассмотрении радиусов символов пропорционально координату «Z» - возможно, лучше всего подходит для непрерывных переменных. Я бы использовал цвет («BG») для дискретных переменных / факторов.

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

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

Другие советы

Конечно, просто используйте 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))

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top