Ggplot'ta çizgi genişliği nasıl değiştirilir?


127

Veri bağlantısı: kullanılan veriler

Kodum:

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

Benim sonucum: Result_Figure

Aes ile yeni sonuç (boyut = 2): NewResult-Şekil

Sorum: İkinci grafikteki sonucu önlemek için çizgi genişliğini daha kesin bir şekilde kontrol etmenin bir yolu var mı? Bunu özellikle belge dostu bulmuyorum ve daha çok, yeni tanımlanan çizgi genişliğine sahip arsa dahil etmek için yayınlama amaçları için.

en iyisi, ismail


9
Çizgi genişliğini değiştirmek için, geom_line () 'a size = 2 bağımsız değişkenini eklemeniz yeterlidir.
Didzis Elferts

3
Biraz deney yaptım ve 1 ve 2 ile kullandığınız gibi boyutun integral değerlerini varsayması gerekmiyor gibi görünüyor. 1.5 girdim ve arada bir şey buldum. Bunun gibi sabit bir değerin sizin için her koşulda işe yarayıp yaramayacağından emin değilim, ancak en azından ayarlanabilir görünüyor.
jxramos

Yanıtlar:


127

@Didzis doğru cevaba sahipken, birkaç noktaya değineceğim

Estetik, bir ggplot çağrısı içinde ayarlanabilir veya haritalanabilir.

  • Aes (...) içinde tanımlanan bir estetik, verilerden haritalandırılır ve bir lejant oluşturulur.

  • Bir estetik, aes () dışında tanımlanarak tek bir değere de ayarlanabilir.

Anlayabildiğim kadarıyla, istediğiniz şey boyutu tek bir değere ayarlamaktır , çağrı içinde eşleştirmek değilaes()

Aradığınızda aes(size = 2)bir adlandırılan değişken oluşturur `2`bunun için bir çağrı içinde olduğu gibi sabit bir değere onu haritalama ve boyutunu oluşturmak için kullanır aes(böylece Lejandınızdaki görünür).

Size = 1 kullanma (ve reg_labellerhangisi olmadan komut dosyanızın bir yerinde tanımlanabilir)

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

görüntü açıklamasını buraya girin

ve size = 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'))

görüntü açıklamasını buraya girin

Artık nihai görüntü boyutu ve cihaz türü ile uygun şekilde çalışacak boyutu tanımlayabilirsiniz.


72

Satır genişliği ggplot2argümanı ile değiştirilebilir size=içinde geom_line().

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

görüntü açıklamasını buraya girin


2
Seçeneğinizi zaten denedim, ancak sorun şu ki, çizgi belge dostu olarak kabul edilemeyecek kadar kalın. Aes (boyut) kullanırken, eklediğim ikinci grafiği alıyorum. En iyi uyumu seçmek için genişliği daha sistematik bir şekilde kontrol edebilmek istiyorum.
iouraich

8
@ smailov83, çağrının içine boyut koymayın aes. ggplot2
Cevabıma

6
Varsayılan değer size=1, belki 0.5, daha düşük görünüyor , bu yüzden kullanımı size=1oldukça iyi sonuçlar veriyor bence. Genişliği ince ayarlamak için ondalık sayılar da kullanılabilir (örneğin size=1.2).
Ricardo

5

Satır genişliği ggplot2argümanı ile değiştirilebilir lwd=içinde geom_line().

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

3

Çizgi genişliğini esnek bir şekilde değiştirmek istiyorsanız, "scale_size_manual" seçeneğini kullanabilirsiniz, bu renk, dolgu, alfa vb. Seçmek için aynı prosedürdür.

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

3

Ayrıca sizeargümanı geom_line()kısma koyarsanız, ancak aes()o olmadan uygun şekilde ölçeklenecek gibi görünür . En azından bu şekilde çalışıyor geom_densityve ben de aynı sorunu yaşadım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.