Bagaimana cara mengubah lebar garis di ggplot?

127

Datalink: data yang digunakan

Kode saya:

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

Hasil saya: Result_Figure

Hasil baru dengan aes (size = 2): NewResult-Figure

Pertanyaan saya: Apakah ada cara untuk mengontrol lebar garis dengan lebih tepat untuk menghindari hasil di plot kedua? Saya secara khusus menganggapnya tidak bersahabat dengan dokumen, dan lebih dari itu untuk tujuan penerbitan menyertakan plot dengan lebar garis yang baru ditentukan.

terbaik, ismail

iouraich
sumber
9
Untuk mengubah lebar garis, cukup tambahkan argumen size = 2 ke geom_line ().
Didzis Elferts
3
Baru saja melakukan beberapa eksperimen dan sepertinya ukuran tidak harus mengasumsikan nilai integral karena Anda menggunakan 1 dan 2. Saya baru saja memasukkan 1,5 dan mendapatkan sesuatu di antaranya. Saya tidak yakin apakah nilai tetap seperti itu akan berhasil untuk Anda dalam semua keadaan, tetapi setidaknya tampaknya bisa merdu.
jxramos

Jawaban:

127

Sementara @Didzis memiliki jawaban yang benar , saya akan memperluas beberapa poin

Estetika dapat diatur atau dipetakan dalam panggilan ggplot.

  • Estetika yang ditentukan dalam aes (...) dipetakan dari data, dan legenda dibuat.

  • Sebuah estetika juga dapat ditetapkan ke satu nilai, dengan mendefinisikannya di luar aes ().

Sejauh yang saya tahu, yang Anda inginkan adalah menyetel ukuran ke satu nilai, bukan memetakan dalam panggilan keaes()

Saat Anda memanggilnya aes(size = 2), membuat variabel yang dipanggil `2`dan menggunakannya untuk membuat ukuran, memetakannya dari nilai konstan seperti yang ada dalam panggilan ke aes(sehingga muncul di legenda Anda).

Menggunakan size = 1 (dan tanpanya reg_labellermungkin didefinisikan di suatu tempat di skrip Anda)

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

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

Sekarang Anda dapat menentukan ukuran agar berfungsi sesuai dengan ukuran gambar akhir dan jenis perangkat.

mnel
sumber
71

Lebar garis dalam ggplot2dapat diubah dengan argumen size=masuk geom_line().

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

masukkan deskripsi gambar di sini

Didzis Elferts
sumber
2
Saya sudah mencoba opsi Anda, tetapi masalahnya adalah garis menjadi terlalu tebal untuk dianggap ramah dokumen. Saat menggunakan aes (ukuran), saya mendapatkan grafik kedua yang saya tambahkan. Saya ingin dapat mengontrol lebar dengan cara yang lebih sistematis untuk memilih yang paling pas.
iouraich
8
@ smailov83, jangan masukkan ukuran dalam panggilan ke aes. Lihat jawaban saya (atau ggplot2buku untuk penjelasan.
mnel
6
Nilai default tampaknya kurang dari size=1, mungkin 0.5, jadi menggunakan size=1hasil yang cukup baik menurut saya. Seseorang juga dapat menggunakan angka desimal untuk menyesuaikan lebar (katakanlah size=1.2).
Ricardo
5

Lebar garis dalam ggplot2dapat diubah dengan argumen lwd=masuk geom_line().

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

Jika Anda ingin mengubah lebar garis secara fleksibel, Anda dapat menggunakan "scale_size_manual", ini adalah prosedur yang sama untuk memilih warna, isi, alfa, dll.

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
sumber
3

Ini juga terlihat seperti jika Anda hanya meletakkan sizeargumen di geom_line()bagian tetapi tanpa argumen aes()itu akan menyesuaikan skala dengan tepat. Setidaknya ini bekerja dengan cara ini geom_densitydan saya memiliki masalah yang sama.

Michael Eason
sumber