2014-01-10 2 views
5

Я хочу нарисовать график Хинтона корреляционной матрицы, и я могу получить 99% пути, но когда я задаю размер точек, которые я рисую, этот размер находится в пикселях и поэтому не масштабируется по мере изменения размера графика. Как я могу «откалибровать» размер точек, например, на долю от размера осей? Я хочу, чтобы это было так, что, когда я удваиваю размер графика, точки удваиваются. Возможно, я использую неправильную геометрию.Сделать размер шкалы точек с графом в ggplot2

У меня есть этот код до сих пор:

library(ggplot2) 
library(data.table) 
library(reshape2) 

DT = data.table(A = rnorm(10), B = rnorm(10), X = rnorm(10), Y = rnorm(10)) 
C = cor(DT) 

ggplot(melt(C), aes(x=Var1, y=Var2, size=abs(value), color=as.factor(sign(value)))) + 
    geom_point(shape = 15) + 
    scale_size_area(max_size = 40) + 
    theme_bw() 

путем изменения max_size для scale_size_area я могу только о получить диагоналей, чтобы заполнить область, но если изменить размер диаграммы точки не масштаб. Есть ли способ заставить точки взять определенный размер в координатах осей? В идеале, конечно, я хотел бы использовать прямоугольники, чтобы иметь любую форму, и она все еще работает, но я не знаю геому, который бы это сделал?

enter image description here

ответ

4

Просто используйте as.numeric повернуть var1 var2 & обратно к сетке координат внутри функции geom_rect() нарисовать прямоугольник над каждой точкой пересечения. Если добавить 0,5 единицы * корреляция генерируют максимум и минимум сопутствующих ords, они подходят именно для значения 1, и сжиматься в пропорции:

ggplot(melt(C)) + 
    geom_point(aes(Var1,Var2)) + 
    geom_rect(aes(xmin=as.numeric(Var1)-0.5*abs(value),xmax=as.numeric(Var1)+0.5*abs(value),ymin=as.numeric(Var2)-0.5*abs(value),ymax=as.numeric(Var2)+0.5*abs(value),fill=as.factor(sign(value)))) + 
    theme_bw() 

enter image description here

+0

Каким образом ваш график имеет меченой оси правильно? Я просто получаю 1,2,3,4, когда я использую ваш пример кода? – Corone

+0

Извините - обновлено - вам нужно добавить вызов geom_point() для обозначения факторов на осях; Я получил изображение и код из синхронизации ... – Troy

+0

Это потрясающе спасибо! – Corone

Смежные вопросы