จะเปลี่ยนความกว้างของเส้นใน ggplot ได้อย่างไร?


128

Datalink: ข้อมูลที่ใช้

รหัสของฉัน:

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

ผลของฉัน: Result_Figure

ผลลัพธ์ใหม่ด้วย aes (size = 2): NewResult-เต็มตัว

คำถามของฉัน: มีวิธีควบคุมความกว้างของเส้นให้แม่นยำยิ่งขึ้นเพื่อหลีกเลี่ยงผลลัพธ์ในพล็อตที่สองหรือไม่? โดยเฉพาะอย่างยิ่งฉันพบว่าเอกสารไม่เป็นมิตรและอื่น ๆ เพื่อวัตถุประสงค์ในการเผยแพร่เพื่อรวมพล็อตที่มีความกว้างของบรรทัดที่กำหนดใหม่

ดีที่สุด ismail


9
หากต้องการเปลี่ยนความกว้างของเส้นเพียงเพิ่มอาร์กิวเมนต์ size = 2 เป็น geom_line ()
Didzis Elferts

3
เพิ่งทำการทดลองบางอย่างและดูเหมือนว่าขนาดไม่จำเป็นต้องถือว่าค่าอินทิกรัลเหมือนกับที่คุณใช้กับ 1 และ 2 ฉันเพิ่งป้อน 1.5 และมีบางอย่างอยู่ระหว่างนั้น ฉันไม่แน่ใจว่าค่าคงที่แบบนั้นจะใช้ได้กับคุณหรือไม่ในทุกสถานการณ์ แต่ดูเหมือนว่าจะปรับได้อย่างน้อย
jxramos

คำตอบ:


127

ในขณะที่ @Didzis มีคำตอบที่ถูกต้องฉันจะขยายความในบางประเด็น

สามารถตั้งค่าหรือกำหนดความสวยงามได้ภายในการโทร ggplot

  • สุนทรียศาสตร์ที่กำหนดไว้ภายใน aes (... ) ถูกจับคู่จากข้อมูลและสร้างตำนาน

  • ความงามอาจถูกตั้งค่าเป็นค่าเดียวโดยกำหนดค่าภายนอก aes ()

เท่าที่ฉันบอกได้สิ่งที่คุณต้องการคือกำหนดขนาดเป็นค่าเดียวไม่ใช่แมปภายในการโทรaes()

เมื่อคุณเรียกaes(size = 2)มันว่าสร้างตัวแปรที่เรียก`2`และใช้สิ่งนั้นในการสร้างขนาดให้ทำการแมปจากค่าคงที่ตามที่อยู่ในการเรียกaes(จึงปรากฏในคำอธิบายแผนภูมิของคุณ)

ใช้ size = 1 (และreg_labellerอาจไม่มีการกำหนดไว้ในสคริปต์ของคุณ)

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

ใส่คำอธิบายภาพที่นี่

และมีขนาด = 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'))

ใส่คำอธิบายภาพที่นี่

ตอนนี้คุณสามารถกำหนดขนาดเพื่อให้เหมาะสมกับขนาดภาพสุดท้ายและประเภทอุปกรณ์


72

ความกว้างของเส้นggplot2สามารถเปลี่ยนแปลงได้ด้วยอาร์กิวเมนต์size=ในgeom_line().

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

ใส่คำอธิบายภาพที่นี่


2
ฉันได้ลองใช้ตัวเลือกของคุณแล้ว แต่ปัญหาคือเส้นหนาเกินไปที่จะถือว่าเป็นเอกสารได้ เมื่อใช้ aes (ขนาด) ฉันจะได้กราฟที่สองที่เพิ่มเข้ามา ฉันต้องการควบคุมความกว้างให้เป็นระบบมากขึ้นเพื่อเลือกขนาดที่ดีที่สุด
iouraich

8
@ smailov83 ไม่ใส่ไซส์ในโทรaes. ดูคำตอบของฉัน (หรือggplot2หนังสือสำหรับคำอธิบาย
mnel

6
ค่าเริ่มต้นน่าจะเป็นน้อยกว่าsize=1อาจจะ0.5ดังนั้นการใช้size=1อัตราผลตอบแทนผลดีมากในความคิดของฉัน คุณยังสามารถใช้ตัวเลขทศนิยมเพื่อปรับความกว้าง (พูดsize=1.2)
Ricardo

5

ความกว้างของเส้นggplot2สามารถเปลี่ยนแปลงได้ด้วยอาร์กิวเมนต์lwd=ในgeom_line().

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

3

หากคุณต้องการแก้ไขความกว้างของเส้นอย่างยืดหยุ่นคุณสามารถใช้ "scale_size_manual" นี่เป็นขั้นตอนเดียวกับการเลือกสีเติมอัลฟา ฯลฯ

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

นอกจากนี้ยังดูเหมือนว่าถ้าคุณใส่sizeอาร์กิวเมนต์ไว้ในgeom_line()ส่วน แต่ไม่มีaes()มันจะปรับขนาดได้อย่างเหมาะสม อย่างน้อยมันก็ใช้งานได้geom_densityและฉันก็มีปัญหาเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.