2015-02-22 3 views
0

Мне очень нравится пакет ggplot2, но часто сталкиваются с основными проблемами, которые останавливают меня в течение многих часов. У меня есть куча объектов ggplot из предыдущих симуляций, которые я хочу изменить внешний вид (форма, альфа, цвет, размер), а не повторять симуляции. Здесь много похожих вопросов в stackoverflow, но все они немного разные, и я еще не смог извлечь общие знания, чтобы легко создавать графики. Я счастлив, если кто-то может указать мне в правильном направлении.Изменение формы, размера, цвета в объектах ggplot

Графики были созданы с кодом, эквивалентным это:

ggplot(data=df) + geom_point(aes(x=Test, y=Val, ymax=max(Val), group=State, colour=State), shape=20, position=position_dodge(.5), alpha=1/2) 

Вот воспроизводимый пример:

require(ggplot2) 

# Create some data. 
state <- c(TRUE,FALSE) 
effect <- c(0.5, 1.0) 
test <- c("A","B") 

# Create combinations. 
df <- expand.grid(Test=test, State=state, Effect=effect) 
# Add some values. 
df$Val <- rnorm(nrow(df)) 

# The plots were created this way. 
gp <- ggplot(data=df) + geom_point(aes(x=Test, y=Val, ymax=max(Val), group=State, colour=State), shape=20, position=position_dodge(.5), alpha=1/2) 
gp <- gp + facet_wrap(~ Effect) 
gp <- gp + theme_bw() 
print(gp) 

# Change colours and re-order legend works. 
cols <- c("TRUE" = "red","FALSE" = "blue") 
gp <- gp + scale_colour_manual(values = cols, breaks = c("TRUE", "FALSE")) # Change and re-order legend. 
print(gp) 

# Change 'shape', 'size' or 'alpha' this way does not work. 
cols <- c("TRUE" = 1,"FALSE" = 3) 
gp <- gp + scale_shape_manual(values=cols, breaks = c("TRUE", "FALSE")) 
print(gp) 
cols <- c("TRUE" = 5,"FALSE" = 10) 
gp <- gp + scale_size_manual(values=cols, breaks = c("TRUE", "FALSE")) 
print(gp) 
cols <- c("TRUE" = 1,"FALSE" = 1/5) 
gp <- gp + scale_alpha_manual(values=cols, breaks = c("TRUE", "FALSE")) 
print(gp) 

Возможно, я должен был создать участки по-разному? Любые комментарии приветствуются. Я обнаружил, что если я указываю «форму» внутри «ИСЗ», я могу изменить форму, но не без проблем:

# Put shape inside aes. 
gp <- ggplot(data=df) + geom_point(aes(x=Test, y=Val, ymax=max(Val), group=State, colour=State, shape=State), position=position_dodge(.4), alpha=1/2) 
gp <- gp + facet_wrap(~ Effect) 
gp <- gp + theme_bw() 
print(gp) 

# Change colours and re-order legend this way works (but adds another legend). 
cols <- c("TRUE" = "red","FALSE" = "blue") 
#gp <- gp + scale_colour_manual(values = cols) # Changes colour. 
gp <- gp + scale_colour_manual(values = cols, breaks = c("TRUE", "FALSE")) # Changes colour, but adds a second legend when re-ordered. 
print(gp) 

# Try to change shape. 
cols <- c("TRUE" = 1,"FALSE" = 3) 
gp <- gp + scale_shape_manual(values=cols, breaks = c("TRUE", "FALSE")) # Back to one legend, but 'FALSE' does not have a symbol. 
print(gp) 

# Change 'size' etc. this way does not work. 
cols <- c("TRUE" = 5,"FALSE" = 10) 
gp <- gp + scale_size_manual(values=cols, breaks = c("TRUE", "FALSE")) 
print(gp) 
+0

ДФ $ Val <- RNorm (nrow (гребень)) ясно, что гребень –

+0

К сожалению, 'гребенка' должно быть 'df' для генерации чисел. Теперь изменилось. –

ответ

0

Я упростил ваш код некоторые, скорректированный одну точку, и проиллюстрировал технику с формами ,

state <- c(TRUE,FALSE) 
effect <- c(0.5, 1.0) 
test <- c("A","B") 

# Create combinations. 
df <- expand.grid(Test=test, State=state, Effect=effect) 
set.seed(1234) # needed for reproducibility 
df$Val <- rnorm(nrow(df)) # changed comb to df 
cols <- c("TRUE" = "red", "FALSE" = "green") 
shapes <- c("TRUE" = 15, "FALSE" = 20) # added this for the shapes 

ggplot(data=df) + 
    geom_point(aes(x=Test, y=Val, shape = State), size = 8) + 
    scale_shape_manual(values=shapes, breaks = c("TRUE", "FALSE")) 

enter image description here

EDIT Вот формы и цвета. Обратите внимание, что я добавил set.seed() выше для воспроизводимости и отлажены COLS и формы:

ggplot(data=df) + 
    geom_point(aes(x=Test, y=Val, shape = State, color = State), size = 8) + 
    scale_shape_manual(values=shapes, breaks = c("TRUE", "FALSE")) + 
    scale_color_manual(values= c("forestgreen", "cadetblue"), breaks = c("TRUE", "FALSE")) 

enter image description here

+0

Спасибо за пример. Он работает с формами, но нельзя добавить: –

+0

Спасибо за пример. Он работает с фигурами, но невозможно добавить: + scale_colour_manual (значения = cols, breaks = c ("TRUE", "FALSE")), чтобы изменить цвет. Если цвет указан в пределах aes, он работает. Думаю, можно только изменить параметры, которые были указаны в aes? Это то, чего я не знал. Кроме того, я просто понял, что могу начать заново с помощью ggplot (data = gp $ data), где gp - старый объект сюжета ... –

+0

Я сделал и то и другое во втором сюжете. Отвечает ли это на ваш вопрос? – lawyeR

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