2013-02-10 2 views
61

Datalink: the data usedКак изменить ширину линии в ggplot?

Мой код:

ccfsisims <- read.csv(file = "F:/Purdue University/RA_Position/PhD_ResearchandDissert/PhD_Draft/GTAP-CGE/GTAP_NewAggDatabase/NewFiles/GTAP_ConsIndex.csv", header=TRUE, sep=",", na.string="NA", dec=".", strip.white=TRUE) 
ccfsirsts <- as.data.frame(ccfsisims) 
ccfsirsts[6:24] <- sapply(ccfsirsts[6:24],as.numeric) 
ccfsirsts <- droplevels(ccfsirsts) 
ccfsirsts <- transform(ccfsirsts,sres=factor(sres,levels=unique(sres))) 

library(ggplot2) 

#------------------------------------------------------------------------------------------ 
#### Plot of food security index for Morocco and Turkey by sector 
#------------------------------------------------------------------------------------------ 

#_Code_Begin... 

datamortur <- melt(ccfsirsts[ccfsirsts$region %in% c("TUR","MAR"), ]) # Selecting regions of interest 
datamortur1 <- datamortur[datamortur$variable %in% c("pFSI2"), ] # Selecting the food security index of interest 
datamortur2 <- datamortur1[datamortur1$sector %in% c("wht","gro","VegtFrut","osd","OthCrop","VegtOil","XPrFood"), ] # Selecting food sectors of interest 
datamortur3 <- subset(datamortur2, tradlib !="BASEDATA") # Eliminating the "BASEDATA" scenario results 

allfsi.f <- datamortur3 
fsi.wht <- allfsi.f[allfsi.f$sector %in% c("wht"), ] 

Figure29 <- ggplot(data=fsi.wht, aes(x=factor(sres),y=value,colour=factor(tradlib))) 
Figure29 + geom_line(aes(group=factor(tradlib),size=2)) + facet_grid(regionsFull~., scales="free_y", labeller=reg_labeller) + scale_colour_brewer(type = "div") + 
theme(axis.text.x = element_text(colour = 'black', angle = 90, size = 13, hjust = 0.5, vjust = 0.5),axis.title.x=element_blank()) + 
ylab("FSI (%Change)") + theme(axis.text.y = element_text(colour = 'black', size = 12), axis.title.y = element_text(size = 12, hjust = 0.5, vjust = 0.2)) + 
theme(strip.text.y = element_text(size = 11, hjust = 0.5, vjust = 0.5, face = 'bold')) 

Мой результат: Result_Figure

Newresult с Айз (размер = 2): NewResult-Figure

Мой вопрос: Есть способ более точно контролировать ширину линии, чтобы избежать результата в второй сюжет? В частности, я считаю документ недружественным, и тем более для целей публикации, чтобы включить сюжет с новой шириной строки.

лучше, исмаил

+8

Чтобы изменить ширину линии, просто добавьте аргумент size = 2 в geom_line(). –

+2

Просто сделал некоторые эксперименты, и похоже, что размер не должен принимать интегральные значения при использовании с 1 и 2.Я только что ввел 1,5 и получил что-то среднее. Я не уверен, что для вас при любых обстоятельствах будет работать такая фиксированная ценность, но, по крайней мере, она будет настраиваться. – jxramos

ответ

77

Хотя @Didzis имеет correct answer, я расширится на несколько пунктов

Эстетика может быть установлен или отображается в ggplot вызова.

  • Эстетика, определенная в пределах aes (...), отображается на основе данных и создается легенда.

  • Эстетика также может быть установлена ​​на одно значение, определяя ее вне aes().

Насколько я могу сказать, что вы хотите, чтобы установить размер для одного значения, не карту в вызове aes()

При вызове aes(size = 2) он создает переменную `2` и использует это для создания размера, сопоставляя его с постоянным значением, поскольку оно находится в вызове aes (таким образом, оно появляется в вашей легенде).

Используя размер = 1 (и без reg_labeller, который, возможно, определенной где-то в вашем скрипте)

Figure29 + 
    geom_line(aes(group=factor(tradlib)),size=1) + 
    facet_grid(regionsFull~., scales="free_y") + 
    scale_colour_brewer(type = "div") + 
    theme(axis.text.x = element_text(
      colour = 'black', angle = 90, size = 13, 
      hjust = 0.5, vjust = 0.5),axis.title.x=element_blank()) + 
    ylab("FSI (%Change)") + 
    theme(axis.text.y = element_text(colour = 'black', size = 12), 
      axis.title.y = element_text(size = 12, 
      hjust = 0.5, vjust = 0.2)) + 
    theme(strip.text.y = element_text(size = 11, hjust = 0.5, 
      vjust = 0.5, face = 'bold')) 

enter image description here

и с размером = 2

Figure29 + 
    geom_line(aes(group=factor(tradlib)),size=2) + 
    facet_grid(regionsFull~., scales="free_y") + 
    scale_colour_brewer(type = "div") + 
    theme(axis.text.x = element_text(colour = 'black', angle = 90, 
      size = 13, hjust = 0.5, vjust = 
      0.5),axis.title.x=element_blank()) + 
    ylab("FSI (%Change)") + 
    theme(axis.text.y = element_text(colour = 'black', size = 12), 
      axis.title.y = element_text(size = 12, 
      hjust = 0.5, vjust = 0.2)) + 
     theme(strip.text.y = element_text(size = 11, hjust = 0.5, 
      vjust = 0.5, face = 'bold')) 

enter image description here

Теперь вы можете определить e размер для правильной работы с конечным размером изображения и типом устройства.

43

Ширина линии в ggplot2 может быть изменено с помощью аргумента size= в geom_line().

#sample data 
df<-data.frame(x=rnorm(100),y=rnorm(100)) 
ggplot(df,aes(x=x,y=y))+geom_line(size=2) 

enter image description here

+2

Я уже пробовал свой вариант, но проблема в том, что линия становится слишком толстой, чтобы ее можно было считать дружественной к документу. При использовании aes (size) я получаю второй график, который я добавил. Я хочу иметь возможность контролировать ширину более систематическим образом, чтобы выбрать наилучшее соответствие. – iouraich

+5

@ smailov83, не помещайте размер в течение вызова 'aes'. См. Мой ответ (или книгу 'ggplot2' для объяснения. – mnel

+3

Значение по умолчанию меньше, чем' size = 1', возможно '0.5', поэтому использование' size = 1' дает неплохие результаты, на мой взгляд. также используйте десятичные числа для точной настройки ширины (например, 'size = 1.2'). – Ricardo

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