Или воспользуйтесь 5 уникальными формами, которые принимают цвета заливки.

я есть фрейм данных с более чем 40 факторами, и я хотел бы назначить разные формы для каждого уровня. Однако, как показано вscale_shapes_table изggplot2Я могу назначить только 26 из них, а некоторые!,",# и так далее.

Но я знаю, что в python или jmp вы можете назначать множество фигур (например, звездочки, левый треугольник, правый треугольник, прямоугольник и т. Д.). Это также возможно вggplot2?

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))

 Roland18 окт. 2017 г., 08:16
@ Александр Ты не считал достаточно. Человеческому мозгу очень сложно различить 40 фигур. Вы создаете плохую визуализацию.
 neilfws18 окт. 2017 г., 07:20
Вы должны подумать, является ли использование такого количества форм эффективной визуализацией. Возможно, ваши данные можно разделить на меньшее количество категорий? Также рассмотрим аспекты.
 Alexander18 окт. 2017 г., 07:21
@neilfws да, я учел это, и мне нужно много форм, насколько это возможно :)
 Alexander18 окт. 2017 г., 08:30
@Roland Я не думаю, что использование фасета является единственным решением. некоторые люди не хотят видеть отдельные данные. на мой взгляд, гораздо проще отслеживать форму, чем использовать одни и те же 8 фигур с разными цветами. В любом случае, спасибо за ваш комментарий.
 Roland18 окт. 2017 г., 09:16
Я никогда не говорил, что использование граней - единственное решение. Я сказал, что использование 40 символов - плохое решение, скорее всего, то, что называет Tuftechartjunk, Вы должны спросить на stats.stackexchange.com о лучших способах визуализации ваших данных (им нравятся вопросы визуализации).

Ответы на вопрос(3)

Может быть, использоватьгр в качестве меток, используяggrepelлегче найти число, чем сравнивать фигуры:

library(ggrepel)

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

 zx875418 окт. 2017 г., 09:36
@Rolandshiny Мне пришло в голову, когда я читаю пост, но я думаю, что OP хочет статические графики. Да, для этого нужно больше группироваться с цветами.
 Roland18 окт. 2017 г., 09:33
Хорошо, но все еще очень загромождено. Если это технически возможно, я мог бы использовать интерактивный график, который позволяет читателю выделить одну или две категории, назначив им цвета. Но, конечно, я сомневаюсь, что отображение 40 категорий важно. Я мог бы также попытаться объединить категории.
Решение Вопроса

Большой набор символов доступен с помощьюemojifont пакет с шрифтом Awasome (см. полный списокВот). Более подробная информация данаВот.

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, сначала переназначьте графическое устройство следующим образом (более подробная информация данаВот):

devtools::install_github("coatless/balamuta")
library("balamuta")
external_graphs()
 Alexander18 окт. 2017 г., 17:54
Мне нужен код, который должен работать в rstudio :)
 Marco Sandri18 окт. 2017 г., 18:12
@ Александр Если вам нужно использовать Rstudio, смотрите обновление моего поста. Я использую это решение, когда графики не отображаются в Rstudio.
 Alexander18 окт. 2017 г., 17:53
Спасибо за ответ. у этого emjifont тоже есть математические символы? не мог их найти? Или похоже на базовые символы, но разные формы?

и цветами, чтобы различить 40 точек? Я считаю, что визуально легче различить 40 элементов, чем использовать / прибегать к необычным символам.

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 уникальными формами, которые принимают цвета заливки.

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))

Ваш ответ на вопрос