2017-08-14 23 views
1

我想使用R stat模块prcomp和ggplot2进行pca分析,示例数据如下所示。对于每个汽车模型,有三列中的数据,到目前为止,我能够使用下面给出的代码生成该图。ggplot几何点,修改文本

DF:

> head(car.df) 
    honda_1_smp honda_2_smp honda_3_smp audi_1_smp audi_2_smp audi_3_smp merc_1_smp merc_2_smp 
s1 0.000289 0.000000 0.076095 0.056965 0.030314 0.000000 0.000000 0.028548 
s2 1.588724 1.678821 0.795915 0.552910 0.503845 0.248782 0.201806 2.324172 
s3 0.067802 0.068452 0.082904 0.014259 0.038896 0.044144 0.003634 0.167235 
s4 0.000000 0.000000 0.000000 0.000000 0.000000 0.008724 0.000000 0.000000 
s5 0.822612 1.137569 0.008302 0.025600 0.000000 0.000000 0.000000 0.000000 
s6 0.025091 0.096847 0.000000 0.031416 0.024999 0.000000 0.012987 0.000000 

代码:

carpca = prcomp(t(car.df), center=T) 
summary(carpca) 
car12 = data.frame(PC1=carpca$x[,1], PC2= carpca$x[,2], type=rownames(carpca$x)) 
ggplot(car12, aes(x=PC1 , y=PC2 , col=type)) + 
    geom_point() + geom_text(aes(label = type), hjust=0, vjust=0) + 
    xlab("PC1 89%") + ylab("PC2 77%") + ggtitle("car") 

情节enter image description here

问题

如何组我的所有复制标题为一体的颜色和形状的情节和传说。 含义:对于audi和merc,每个本田都会有相同的颜色和形状。

+1

我相信,在'car12',创建另一个列'brand'表明品牌,然后用'颜色=品牌,外形=在'aes'将工作brand'。 –

回答

2

我会使用正则表达式(gsub)从“type”属性中删除复制标识。

car12 = data.frame(PC1=carpca$x[,1], PC2= carpca$x[,2], type=gsub("_.*$", "", rownames(carpca$x))) 
ggplot(car12, aes(x=PC1 , y=PC2 , col=type)) + 
    geom_point() + geom_text(aes(label = type), hjust=0, vjust=0) + 
    xlab("PC1 89%") + ylab("PC2 77%") + ggtitle("car") 

enter image description here

+0

它像魅力一样,我怎么改变每种类型的形状 – sbradbio

+1

也许你可以用这种方式绘制你的数据...'ggplot(car12,aes(x = PC1,y = PC2,col = type))+ geom_point (aes(shape = type))+ annotate(geom =“text”,x = car12 $ PC1,y = car12 $ PC2, label = car12 $ type,hjust = -0.1,vjust = -0.1)+ xlab (“PC1 89%”)+ ylab(“PC2 77%”)+ ggtitle(“汽车”) ' –

+0

这工作,除了我原来的数据有超过6个变量,我得到错误'警告消息: 1 :形状调色板可以处理最多6个离散值,因为比6更多地变得难以区分;你有7.手动指定 形状,如果你必须有它们' – sbradbio