发布
社区首页 >问答首页 >在scale_shape_manual中分配40个或更多形状

在scale_shape_manual中分配40个或更多形状
EN

Stack Overflow用户
提问于 2017-10-18 13:15:56
回答 3查看 12.7K关注 0票数 9

我有一个超过40个因素水平的数据框架,我想为每个水平分配不同的形状。但是,如ggplot2scale_shapes_table所示,我只能分配其中的26个,以及一些!"#等等。

但我知道在python或jmp中,你可以指定许多形状(如星号、左三角形、右三角形、矩形等)。在ggplot2中也可以吗

代码语言:javascript
代码运行次数:0
复制
data=data.frame(gr=seq(1,40), x1=runif(40), y1=runif(40))
library(ggplot2)
ggplot(data=data,aes(x=x1,y=y1,shape=factor(gr),col=factor(gr)))+
  geom_point(alpha = 0.3,size=4,stroke=1.4) +
  scale_shape_manual(values=c(0:40))

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-18 23:46:31

使用带有Font Awasome的emojifont包可以获得大量的符号(参见完整的列表here)。更多详细信息将提供给here

代码语言:javascript
代码运行次数:0
复制
library(ggplot2)
library(emojifont)
set.seed(1234)
symbls <- c('fa-github', 'fa-binoculars', 'fa-twitter', 'fa-android', 'fa-coffee', 
'fa-cube', 'fa-ambulance','fa-check','fa-cutlery','fa-cogs','fa-dot-circle-o','fa-car',
'fa-building','fa-fire', 'fa-flag','fa-female','fa-gratipay','fa-heart','fa-magnet',
'fa-lock','fa-map','fa-puzzle-piece','fa-shopping-cart','fa-star','fa-sticky-note',
'fa-stop-circle-o','fa-volume-down','fa-anchor', 'fa-beer','fa-book','fa-cloud',
'fa-comment','fa-eject','fa-chrome','fa-child','fa-bomb', 'fa-certificate',
'fa-desktop','fa-fire-extinguisher','fa-diamond')
idx <- order(symbls)
fa <- fontawesome(symbls)
k <- length(fa)
data=data.frame(gr=factor(fa, levels=fa[idx]), x1=runif(k), y1=runif(k))
data$gr <- factor(data$gr, levels=fa[idx])

ggplot(data, aes(x1, y1, colour=gr, label=gr)) +
    xlab(NULL) + ylab(NULL) + geom_point(size=-1) +
    geom_text(family='fontawesome-webfont', size=6, show.legend=FALSE) +
    theme(legend.text=element_text(family='fontawesome-webfont')) +
    scale_colour_discrete("Points",guide=guide_legend(override.aes=list(size=4)))

警告:如果你想在Rstudio中使用代码,首先重新分配绘图设备,如下所示:

代码语言:javascript
代码运行次数:0
复制
devtools::install_github("coatless/balamuta")
library("balamuta")
external_graphs()
票数 12
EN

Stack Overflow用户

发布于 2017-10-18 14:04:46

使用5个或10个具有不同颜色的不同形状的组合足以区分这40个点会更好吗?我认为,与使用/求助于不寻常的符号相比,这些在视觉上更容易区分这40个元素。

代码语言:javascript
代码运行次数:0
复制
ggplot(data=data,aes(x=x1,y=y1, shape=factor(gr), col=factor(gr)))+
 geom_point(alpha = 0.5, size=4, stroke=1.4) +
 scale_shape_manual(values=rep(c(0:2,5:6,9:10,11:12,14), times=4))

或者利用5种独特的形状来填充颜色。

代码语言:javascript
代码运行次数:0
复制
ggplot(data=data,aes(x=x1,y=y1, shape=factor(gr), fill=factor(gr), col=factor(gr)))+
 geom_point(alpha = 0.5, size=4, stroke=1.4) +
 scale_shape_manual(values=rep(c(21:25), times=8))

票数 8
EN

Stack Overflow用户

发布于 2017-10-18 15:11:53

也许可以使用gr作为标签,使用ggrepel,比比较形状更容易找到数字:

代码语言:javascript
代码运行次数:0
复制
library(ggrepel)

ggplot(data = data, aes(x = x1, y = y1, label = gr))+
  geom_point() +
  geom_label_repel()

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46803260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档