Hoe de lijnbreedte in GGPLOT te wijzigen?

Datalink:
De gebruikte gegevens

Mijn code:

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

Mijn resultaat:

Nieuw resultaat met aes(size=2):

Mijn vraag:
Is er een manier om de lijnbreedte nauwkeuriger te regelen om het resultaat in de tweede plot te vermijden? Ik vind het vooral documentonvriendelijk, en vooral voor publicatiedoeleinden om de plot op te nemen met de nieuw gedefinieerde lijndikte.

beste,
ismail


Antwoord 1, autoriteit 100%

Hoewel @Didzis het juiste antwoordheeft, zal ik op een paar punten ingaan

Esthetiek kan worden ingesteld of toegewezen binnen een ggplot-aanroep.

  • Een esthetiek gedefinieerd binnen aes(…) wordt in kaart gebracht op basis van de gegevens en er wordt een legenda gemaakt.

  • Een esthetiek kan ook worden ingesteld op een enkele waarde, door deze buiten aes() te definiëren.

Voor zover ik weet, wil je de grootte instellenop een enkele waarde, niet mapbinnen de aanroep van aes()

Wanneer u aes(size = 2)aanroept, wordt een variabele gemaakt met de naam `2`en gebruikt die om de grootte te creëren, waarbij deze wordt toegewezen aan een constante waarde als is binnen een aanroep naar aes(dus verschijnt het in uw legenda).

Gebruik size = 1 (en zonder reg_labellerdie misschien ergens in uw script is gedefinieerd)

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

en met maat = 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'))

U kunt nu de grootte definiëren om op de juiste manier te werken met de uiteindelijke afbeeldingsgrootte en het apparaattype.


Antwoord 2, autoriteit 52%

Lijnbreedte in ggplot2kan worden gewijzigd met argument size=in geom_line().

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


Antwoord 3, Autoriteit 6%

Lijnbreedte in ggplot2Kan worden gewijzigd met Argument lwd=IN geom_line().

geom_line(aes(x=..., y=..., color=...), lwd=1.5)

Antwoord 4, Autoriteit 3%

Het ziet er ook uit als je gewoon de sizeargument in de geom_line()portie, maar zonder de aes()Het zal schalen op gepaste wijze. Het werkt tenminste op deze manier met geom_densityen ik had hetzelfde probleem.


Antwoord 5, Autoriteit 3%

Als u de lijnbreedte flexibel wilt wijzigen, kunt u “schaal_size_manual” gebruiken, dit is dezelfde procedure voor het kiezen van de kleur, vulling, alfa, enz.

library(ggplot2)
library(tidyr)
x = seq(0,10,0.05)
df <- data.frame(A = 2 * x + 10,
                 B = x**2 - x*6,
                 C = 30 - x**1.5,
                 X = x)
df = gather(df,A,B,C,key="Model",value="Y")
ggplot( df, aes (x=X, y=Y, size=Model, colour=Model ))+
  geom_line()+
  scale_size_manual( values = c(4,2,1) ) +
  scale_color_manual( values = c("orange","red","navy") ) 

Other episodes