Datalink: używane dane
Mój kod:
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'))
Mój wynik:
Newresult with aes (size = 2):
Moje pytanie: czy istnieje sposób na dokładniejsze kontrolowanie szerokości linii, aby uniknąć wyniku na drugim wykresie? Szczególnie uważam, że jest to nieprzyjazne dla dokumentu, a zwłaszcza do celów publikacyjnych, aby uwzględnić wykres z nowo zdefiniowaną szerokością linii.
najlepiej, ismail
Odpowiedzi:
Chociaż @Didzis ma poprawną odpowiedź , kilka kwestii
Estetykę można ustawić lub odwzorować w wywołaniu ggplot.
Estetyka zdefiniowana w aes (...) jest odwzorowywana na podstawie danych i tworzona jest legenda.
Estetykę można również przypisać pojedynczej wartości, definiując ją poza aes ().
O ile wiem, chcesz ustawić rozmiar na jedną wartość, a nie mapować w wywołaniu
aes()
Kiedy wywołujesz
aes(size = 2)
, tworzy zmienną o nazwie`2`
i używa jej do tworzenia rozmiaru, mapując ją ze stałej wartości, tak jak jest w wywołaniu doaes
(w ten sposób pojawia się w twojej legendzie).Używanie size = 1 (i bez
reg_labeller
którego jest prawdopodobnie zdefiniowane gdzieś w skrypcie)i przy rozmiarze = 2
Możesz teraz zdefiniować rozmiar, aby działał odpowiednio z ostatecznym rozmiarem obrazu i typem urządzenia.
źródło
Szerokość linii w
ggplot2
można zmienić za pomocą argumentusize=
wgeom_line()
.źródło
aes
. Zobacz moją odpowiedź (lubggplot2
wyjaśnienie w książcesize=1
być może0.5
, więcsize=1
moim zdaniem użycie daje całkiem dobre wyniki. Można również użyć liczb dziesiętnych, aby precyzyjnie dostroić szerokość (powiedzmysize=1.2
).Szerokość linii w
ggplot2
można zmienić za pomocą argumentulwd=
wgeom_line()
.źródło
Jeśli chcesz elastycznie modyfikować szerokość linii, możesz użyć "scale_size_manual", jest to ta sama procedura wybierania koloru, wypełnienia, alfa itp.
źródło
Wygląda również na to, że jeśli po prostu umieścisz
size
argument wgeom_line()
części, ale bez elementuaes()
zostanie on odpowiednio skalowany. Przynajmniej działa w ten sposób zgeom_density
i miałem ten sam problem.źródło