Làm thế nào để thay đổi độ rộng dòng trong ggplot?


127

Liên kết dữ liệu: dữ liệu được sử dụng

Mã của tôi:

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

Kết quả của tôi: Kết quả

Newresult với aes (size = 2): NewResult-Hình

Câu hỏi của tôi: Có cách nào để kiểm soát độ rộng đường chính xác hơn để tránh kết quả trong âm mưu thứ hai không? Tôi đặc biệt thấy nó không thân thiện với tài liệu và hơn thế nữa cho mục đích xuất bản để bao gồm cốt truyện với độ rộng dòng mới được xác định.

tốt nhất, ismail


9
Để thay đổi độ rộng dòng, chỉ cần thêm kích thước đối số = 2 vào geom_line ().
Didzis Elferts

3
Mới thực hiện một số thử nghiệm và có vẻ như kích thước không phải giả sử các giá trị tích phân khi bạn sử dụng với 1 và 2. Tôi vừa nhập 1.5 và có một cái gì đó ở giữa. Tôi không chắc chắn nếu một giá trị cố định như thế sẽ phù hợp với bạn trong mọi trường hợp nhưng ít nhất nó có thể điều chỉnh được.
jxramos

Câu trả lời:


126

Trong khi @Didzis có câu trả lời đúng , tôi sẽ mở rộng ở một vài điểm

Tính thẩm mỹ có thể được đặt hoặc ánh xạ trong một cuộc gọi ggplot.

  • Một thẩm mỹ được xác định trong aes (...) được ánh xạ từ dữ liệu và một huyền thoại được tạo ra.

  • Một thẩm mỹ cũng có thể được đặt thành một giá trị duy nhất, bằng cách xác định nó bên ngoài aes ().

Theo như tôi có thể nói, điều bạn muốn là đặt kích thước thành một giá trị duy nhất, chứ không phải ánh xạ trong lệnh gọi tớiaes()

Khi bạn gọi aes(size = 2)nó sẽ tạo một biến được gọi `2`và sử dụng biến đó để tạo kích thước, ánh xạ nó từ một giá trị không đổi như trong lệnh gọi aes(do đó nó xuất hiện trong chú giải của bạn).

Sử dụng size = 1 (và không có reg_labellercái nào có thể được xác định ở đâu đó trong tập lệnh của bạn)

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

nhập mô tả hình ảnh ở đây

và với kích thước = 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'))

nhập mô tả hình ảnh ở đây

Bây giờ bạn có thể xác định kích thước để hoạt động phù hợp với kích thước hình ảnh và loại thiết bị cuối cùng.


70

Độ rộng dòng trong ggplot2có thể được thay đổi với đối số size=trong geom_line().

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

nhập mô tả hình ảnh ở đây


2
Tôi đã thử tùy chọn của bạn, nhưng vấn đề là dòng trở nên quá dày để được coi là thân thiện với tài liệu. Khi sử dụng aes (kích thước), tôi nhận được biểu đồ thứ hai mà tôi đã thêm. Tôi muốn có thể kiểm soát chiều rộng một cách có hệ thống hơn để chọn phù hợp nhất.
iouraich

8
@ smailov83, không đặt kích thước trong cuộc gọi đến aes. Xem câu trả lời của tôi (hoặc ggplot2cuốn sách để được giải thích.
mnel

6
Giá trị mặc định dường như ít hơn size=1, có thể 0.5, vì vậy sử dụng size=1mang lại kết quả khá tốt theo quan điểm của tôi. Người ta cũng có thể sử dụng số thập phân để tinh chỉnh chiều rộng (giả sử size=1.2).
Ricardo

5

Độ rộng dòng trong ggplot2có thể được thay đổi với đối số lwd=trong geom_line().

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

3

Nếu bạn muốn sửa đổi độ rộng đường một cách linh hoạt, bạn có thể sử dụng "scale_size_manual", đây là quy trình tương tự để chọn màu, tô, alpha, v.v.

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

Nó cũng giống như nếu bạn chỉ đặt sizeđối số trong geom_line()phần nhưng không có đối số aes()sẽ có tỷ lệ phù hợp. Ít nhất là nó hoạt động theo cách này geom_densityvà tôi đã có cùng một vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.