Объедините несколько участков на одном участке, но отображайте оси только в определенных из них с помощью ggplot2

#r #ggplot2

Вопрос:

У меня есть фрейм данных ниже

 d1_4b<-structure(list(conm = c("Apple Inc", "Apple Inc", "Apple Inc", 
"Apple Inc", "Apple Inc", "Apple Inc", "Apple Inc", "Apple Inc", 
"Apple Inc", "Apple Inc", "Apple Inc", "Intl Business Machines Corp", 
"Intl Business Machines Corp", "Intl Business Machines Corp", 
"Intl Business Machines Corp", "Intl Business Machines Corp", 
"Intl Business Machines Corp", "Intl Business Machines Corp", 
"Intl Business Machines Corp", "Intl Business Machines Corp", 
"Intl Business Machines Corp", "Intl Business Machines Corp", 
"Paypal Holdings Inc", "Paypal Holdings Inc", "Paypal Holdings Inc", 
"Paypal Holdings Inc", "Paypal Holdings Inc", "Paypal Holdings Inc", 
"Paypal Holdings Inc", "Paypal Holdings Inc", "Qualcomm Inc", 
"Qualcomm Inc", "Qualcomm Inc", "Qualcomm Inc", "Qualcomm Inc", 
"Qualcomm Inc", "Qualcomm Inc", "Qualcomm Inc", "Qualcomm Inc", 
"Qualcomm Inc", "Qualcomm Inc", "Amazon.com Inc", "Amazon.com Inc", 
"Amazon.com Inc", "Amazon.com Inc", "Amazon.com Inc", "Amazon.com Inc", 
"Amazon.com Inc", "Amazon.com Inc", "Amazon.com Inc", "Amazon.com Inc", 
"Amazon.com Inc", "Facebook Inc", "Facebook Inc", "Facebook Inc", 
"Facebook Inc", "Facebook Inc", "Facebook Inc", "Facebook Inc", 
"Facebook Inc", "Facebook Inc", "Facebook Inc", "Facebook Inc"
), pr_margin = structure(c(0.296159448064392, 0.328982253877634, 
0.373437779538426, 0.326230179626704, 0.330692852649142, 0.349699420234046, 
0.322077632257975, 0.308610415557902, 0.307376045282052, 0.293945590258827, 
0.281747809773601, 0.236074536151636, 0.240974222754312, 0.247342283292028, 
0.241270764202865, 0.246063819469141, 0.237616373668049, 0.205067567567568, 
0.195276665108227, 0.219132816524481, 0.219166007751436, 0.208964955175224, 
0.229522818492642, 0.222305295950156, 0.228914359861592, 0.21306032097399, 
0.210034469551896, 0.213772571354605, 0.208474004051317, 0.231984711475715, 
0.35938495132381, 0.408285243198681, 0.345431724282203, 0.344848387356229, 
0.346811643447729, 0.333372888730667, 0.326781013840537, 0.292152726959666, 
0.239222241773711, 0.243427109974425, 0.267912199162487, 0.0603438194363232, 
0.0419327329076273, 0.041494115528784, 0.0451163165529469, 0.043949746033173, 
0.0682578546997365, 0.079073734989374, 0.0737633949152733, 0.106562410095883, 
0.106380248251474, 0.101081685938083, 0.593211752786221, 0.560226354082458, 
0.232265671055217, 0.498348577235772, 0.499278036258623, 0.459839357429719, 
0.536724799189522, 0.57388138636755, 0.523532361474265, 0.491223107062534, 
0.459873204211016), label = "Operating Income Before Depreciation", format.stata = ".0g"), 
    datadate = structure(c(14882, 15247, 15613, 15978, 16343, 
    16708, 17074, 17439, 17804, 18169, 18535, 14974, 15339, 15705, 
    16070, 16435, 16800, 17166, 17531, 17896, 18261, 18627, 16070, 
    16435, 16800, 17166, 17531, 17896, 18261, 18627, 14882, 15247, 
    15613, 15978, 16343, 16708, 17074, 17439, 17804, 18169, 18535, 
    14974, 15339, 15705, 16070, 16435, 16800, 17166, 17531, 17896, 
    18261, 18627, 14974, 15339, 15705, 16070, 16435, 16800, 17166, 
    17531, 17896, 18261, 18627), label = "Data Date", format.stata = "%td", class = "Date")), row.names = c(NA, 
-63L), class = c("tbl_df", "tbl", "data.frame"))
 

и я ищу способ объединить 4 линейных графика на одном графике, но я хочу, чтобы даты отображались только на нижних участках, а значения оси y-только на участках первого столбца, как на изображении ниже:

введите описание изображения здесь

Я использовал метод delow с пакетом ggpubr, но я считаю, что может быть другой метод, который может объединить их все, как ожидалось, возможно, без необходимости создавать каждый из них отдельно.

 library(ggpubr)
library(ggplot2)
# 3. Create a line plot
lp1 <- ggplot(subset(d1_4b,conm =='Amazon.com Inc'), aes(x = datadate, y = pr_margin))   
  geom_line() 
lp1
lp2 <- ggplot(subset(d1_4b,conm =='Facebook Inc'), aes(x = datadate, y = pr_margin))   
  geom_line() 
lp2
lp3 <- ggplot(subset(d1_4b,conm =='Apple Inc'), aes(x = datadate, y = pr_margin))   
  geom_line() 
lp3
lp4 <- ggplot(subset(d1_4b,conm =='Paypal Holdings Inc'), aes(x = datadate, y = pr_margin))   
  geom_line() 
lp4

figure <- ggarrange(lp1,lp2,lp3,lp4,
                    ncol = 2, nrow = 2)
figure
 

Ответ №1:

мы можем использовать собственный ggplot2 синтаксис;

 plot <- ggplot(d1_4b, aes(x = datadate, y = pr_margin))   
geom_line() 
facet_wrap(~conm) 
theme_minimal() 
scale_y_continuous(labels = scales::percent) 
ylab('Profit Margin') 
xlab('Fiscal Year')

plot
 

выход;

введите описание изображения здесь