Wie ändere ich die Linienbreite in ggplot?

127

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: Ergebnis_Abbildung

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

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

am besten ismail

iouraich
quelle
9
Um die Linienbreite zu ändern, fügen Sie geom_line () einfach die Argumentgröße = 2 hinzu.
Didzis Elferts
3
Ich habe gerade experimentiert und es sieht so aus, als müsste die Größe keine ganzzahligen Werte annehmen, da Sie sie mit 1 und 2 verwenden. Ich habe gerade 1,5 eingegeben und etwas dazwischen erhalten. Ich bin mir nicht sicher, ob ein solcher fester Wert unter allen Umständen für Sie funktionieren würde, aber er scheint zumindest einstellbar zu sein.
Jxramos

Antworten:

126

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

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

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

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

Soweit ich das beurteilen kann, was Sie wollen, ist Set Größe auf einen einzigen Wert, nicht Karte im Gesprächaes()

Wenn Sie es aufrufen aes(size = 2), wird eine Variable namens aufgerufen `2`und diese verwendet, um die Größe zu erstellen. Dabei wird sie von einem konstanten Wert zugeordnet, wie er sich in einem Aufruf von befindet aes(daher wird er in Ihrer Legende angezeigt).

Verwenden von size = 1 (und ohne reg_labellerdie 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'))

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein

Sie können jetzt die Größe so definieren, dass sie mit der endgültigen Bildgröße und dem Gerätetyp übereinstimmt.

mnel
quelle
70

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

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

Geben Sie hier die Bildbeschreibung ein

Didzis Elferts
quelle
2
Ich habe Ihre Option bereits ausprobiert, aber das Problem ist, dass die Linie zu dick wird, um als dokumentenfreundlich angesehen zu werden. Bei Verwendung der AES (Größe) erhalte ich das zweite Diagramm, das ich hinzugefügt habe. Ich möchte in der Lage sein, die Breite systematischer zu steuern, um die beste Passform zu wählen.
Iouraich
8
@ smailov83, füge keine Größe in den Aufruf von ein aes. Siehe meine Antwort (oder das ggplot2Buch für eine Erklärung.
mnel
6
Der Standardwert scheint kleiner zu sein als size=1vielleicht 0.5, daher size=1liefert die Verwendung meiner Meinung nach recht gute Ergebnisse. Man kann auch Dezimalzahlen verwenden, um die Breite fein einzustellen (sagen wir size=1.2).
Ricardo
5

Die Linienbreite in ggplot2kann mit dem Argument lwd=in geändert werden geom_line().

geom_line(aes(x=..., y=..., color=...), lwd=1.5)
Marcin G.
quelle
3

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") ) 
Juan Chamie
quelle
3

Es sieht auch so aus, als ob Sie das sizeArgument nur in den geom_line()Teil einfügen, aber ohne das Argument aes()wird es entsprechend skaliert. Zumindest funktioniert es so geom_densityund ich hatte das gleiche Problem.

Michael Eason
quelle