2014-10-06 2 views
3

Заданный вопрос на днях, но никто не мог представить себе мой вопрос, поэтому ive сделал пример.R вручную установленная форма в

A <- c('a','b', 'c','d','e') 
types <- factor(A) 
B <- c(1,2,3,4,5) 
C <- c(6,7,8,9,10) 
D <- c(1,2,1,2,3) 
ABC <- data.frame(B,C,D,types) 

library(ggplot2) 

ggplot(ABC, aes(x=B ,y=C ,size=D, colour=as.factor(types),label=types, shape=as.factor(types))) + 
geom_point()+geom_text(size=2, hjust=0,colour="black", vjust=0) + 
scale_size_area(max_size=20, "D", breaks=c(100,500,1000,3000,5000)) + 
scale_x_log10(lim=c(0.05,10),breaks=c(0.1,1,10))+ scale_y_continuous(lim=c(0,30000000)) + 
scale_shape_manual(values=c(15,18,16,17,19))` 

Запланируя это, вы будете иметь факторы a-e, которые имеют приписанные им цвета и формы.

В моем коде я использую scale_shape_manual, чтобы установить фигуры, и они дефинируются последовательностью, то есть порядок факторов - это a, b, c, d, e, а мои значения - 15,18,16,17,19, поэтому = 15 (квадрат), b = 18 и т. Д.

Я хотел бы установить эти фигуры по фактору. Мои данные будут меняться каждый день, и факторы будут в разных порядках, но я всегда хочу, чтобы одни и те же факторы имели одинаковые формы.

Так, очевидно, этот код не работает, но что-то вроде:

scale_shape_manual(values=('a'=15, 'b'=18, 'c'=16, 'd'=17, 'e'=19))

Было бы полезно, если бы я мог сделать то же самое для цвета тоже.

Благодаря

ответ

3

Если я правильно понять вас, всегда будет (в большинстве) пяти категорий «а» - «е», и вы хотите, формы и цвета для них, чтобы соответствовать по наборам данных , Вот один из способов (примечание: gg_color_hue(...) от here):

# set up shapes 
shapes <- c(15,18,16,17,19) 
names(shapes) <- letters[1:5] 

# set up colors 
gg_color_hue <- function(n) { # ggplot default colors 
    hues = seq(15, 375, length=n+1) 
    hcl(h=hues, l=65, c=100)[1:n] 
} 
colors <- gg_color_hue(5) 
names(colors) <- names(shapes) 

# original data 
ggplot(ABC, aes(x=B ,y=C ,size=D, colour=types,label=types, shape=types)) + 
    geom_point()+geom_text(size=2, hjust=0,colour="black", vjust=0) + 
    scale_size_area(max_size=20, "D", breaks=c(100,500,1000,3000,5000)) + 
    scale_x_log10(lim=c(0.05,10),breaks=c(0.1,1,10))+ 
    scale_y_continuous(lim=c(0,30000000)) + 
    scale_shape_manual(values=shapes) + scale_color_manual(values=colors) 

#new data 
DEF <- data.frame(B,C,D,types=factor(c("a","a","a","d","e"))) 
ggplot(DEF, aes(x=B ,y=C ,size=D, colour=types,label=types, shape=types)) + 
    geom_point()+geom_text(size=2, hjust=0,colour="black", vjust=0) + 
    scale_size_area(max_size=20, "D", breaks=c(100,500,1000,3000,5000)) + 
    scale_x_log10(lim=c(0.05,10),breaks=c(0.1,1,10))+ 
    scale_y_continuous(lim=c(0,30000000)) + 
    scale_shape_manual(values=shapes) + scale_color_manual(values=colors) 

+0

Спасибо, хотя ни количество факторов не будет колебаться в пределах 17-19, поэтому используя последовательный способ сделать это, не будет работать, так как когда один фактор не включен, тогда вся последовательность отбрасывается. –

+0

Нет, это не так. Во втором примере отсутствуют коэффициенты «b» и «c», но последовательность * не * отбрасывается; «a» по-прежнему является квадратным, «d» все еще является треугольником, а «e» по-прежнему является кругом. Вы серьезно собираетесь использовать 19 форм? – jlhoward

+0

^Я имел в виду в своей первоначальной попытке отложить seq. Нет, я планирую использовать только значения формы 15,16 и 18. Я хочу установить два из моих факторов как 16, а затем остальные могут быть 15,16 или 18. Использование нескольких фигур, а также разных цветов должно будет достаточно дисперсии для каждого фактора. –

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