wake-up-neo.com

Wie ändere ich die Linienbreite in ggplot?

Datenlink: die verwendeten Daten

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

Mein Ergebnis: Result_Figure

Neues Ergebnis mit aes (Größe = 2): NewResult-Figure

Meine Frage: Gibt es eine Möglichkeit, die Linienbreite genauer zu steuern, um das Ergebnis im zweiten Plot zu vermeiden? Ich finde es besonders dokumentenunfreundlich, und insbesondere für Veröffentlichungszwecke, den Plot mit der neu definierten Linienbreite einzuschließen.

am besten ismail

104
iouraich

Während @Didzis die richtige Antwort hat, werde ich auf einige Punkte eingehen

Die Ästhetik kann innerhalb eines ggplot-Aufrufs festgelegt oder zugeordnet werden.

  • Eine in aes (...) definierte Ästhetik wird aus den Daten abgebildet und eine Legende erstellt.

  • Eine Ästhetik kann auch auf einen einzelnen Wert festgelegt werden, indem sie außerhalb von aes () definiert wird.

Soweit ich das beurteilen kann, soll die Größe auf einen einzelnen Wert festgelegt werden, nicht auf map im Aufruf von aes()

Wenn Sie aes(size = 2) aufrufen, erstellt es eine Variable mit dem Namen `2` Und verwendet diese, um die Größe zu erstellen. Dabei wird sie einem konstanten Wert zugeordnet, wie er sich in einem Aufruf von aes befindet (also es erscheint in deiner Legende).

Verwenden von size = 1 (und ohne reg_labeller, Das möglicherweise irgendwo in Ihrem Skript definiert ist)

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

und mit Größe = 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

Sie können nun die Größe definieren, die für die endgültige Bildgröße und den Gerätetyp geeignet ist.

113
mnel

Die Linienbreite in ggplot2 Kann mit dem Argument size= In geom_line() geändert werden.

#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

64
Didzis Elferts

Wenn Sie die Linienbreite flexibel ändern möchten, können Sie "scale_size_manual" verwenden. Dies ist das gleiche Verfahren zum Auswählen von Farbe, Füllung, Alpha usw.

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

2
Juan Chamie

Es sieht auch so aus, als würden Sie nur das Argument "size" in den Abschnitt geom_line () einfügen, aber ohne aes () wird es entsprechend skaliert. Zumindest funktioniert es so mit geom_density und ich hatte das gleiche Problem

1
Michael Eason