簡體   English   中英

ggplot2中的振幅線+ geom_point

[英]Amplitude lines + geom_point in ggplot2

我想在此圖中添加一些附加的線條。 我必須顯示最大和最小數據在水平和垂直方向上的距離,如下例所示。
就像添加沒有箱子的箱子圖

我嘗試按照此示例進行操作,但未成功。 避免在ggplot2中使用geom_point進行圖覆蓋

我是在photoshop上完成的。 但是,如何添加R?

原始情節

plot <- ggplot(mtcars, aes(x = wt, y = mpg, colour = factor(gear))) +
    geom_point() +
    ggtitle("Cars")

plot

簡單的汽車劇情

修改版

在此處輸入圖片說明

我對此非常好奇,但是發現我的cowplot不能適當地cowplot地塊。 包裝作者本人建議改用patchwork以實現更復雜的間距和對齊方式。 使用cowplot ,我制作了一個虛擬ggplot來將右上角保留為空白,但是無法獲得正確的高度。 patchwork具有plot_spacing函數來執行此操作。

第一個任務是制作一個用於繪制線條的摘要數據框。 我添加了一個行號,因此有一種方法可以垂直堆疊行的頂部邊緣,水平堆疊行的右側邊緣。 (我想一個啞數值和position_dodge可能也起作用。)

library(tidyverse)
library(patchwork)

summaries <- mtcars %>%
  group_by(gear) %>%
  summarise(minwt = min(wt), maxwt = max(wt), minmpg = min(mpg), maxmpg = max(mpg)) %>%
  ungroup() %>%
  mutate(row = row_number())

summaries
#> # A tibble: 3 x 6
#>    gear minwt maxwt minmpg maxmpg   row
#>   <dbl> <dbl> <dbl>  <dbl>  <dbl> <int>
#> 1     3  2.46  5.42   10.4   21.5     1
#> 2     4  1.62  3.44   17.8   33.9     2
#> 3     5  1.51  3.57   15     30.4     3

我使用相同的ggplot基礎繪制了頂部和右側的圖,並為其指定了theme_void因此,除了線段本身之外,沒有任何顯示。 我建議以不同的主題進行介紹,以便您了解情節如何組合在一起。

summary_base <- ggplot(summaries, aes(color = factor(gear)))

top <- summary_base +
  geom_segment(aes(x = minwt, xend = maxwt, y = row, yend = row), show.legend = F) +
  theme_void()

right <- summary_base +
  geom_segment(aes(x = row, xend = row, y = minmpg, yend = maxmpg), show.legend = F) +
  theme_void()

然后是主要情節:

points <- ggplot(mtcars, aes(x = wt, y = mpg, color = factor(gear))) +
  geom_point() +
  theme(legend.position = "bottom")

然后, patchwork功能使您只需將地塊加在一起即可。 它們從左到右,從上到下,所以為了獲得右上的空白,我使用plot_spacer 然后plot_layout設置網格。 您可以根據需要調整相對的高度和寬度-可能會使它們更窄。 這是我第一次使用patchwork ,但是非常簡單。

top + plot_spacer() + points + right + 
  plot_layout(ncol = 2, nrow = 2, widths = c(1, 0.2), heights = c(0.2, 1))

reprex軟件包 (v0.2.0)於2018-07-11創建。

得到了這個結果。 (在原始情節上)

我構建了3個圖+一個空圖,如下所示: ggplot2中帶有邊際直方圖的散點圖

我使用的水平和垂直圖:

horizontal <- ggplot(mtcars, aes(wt, gear, colour = factor(gear)) +
    geom_point() +
    geom_line() +
    theme(legend.position = "none",
          panel.background = element_blank(), 
          panel.grid.major = element_blank(), 
          panel.grid.minor = element_blank(), 
          axis.text.x = element_blank(),
          axis.text.y = element_blank(),
          axis.ticks = element_blank(),
          plot.margin=unit(c(0,1,-0.4,0.7), "cm")) +
    xlab("") + ylab("")

horizontal <- ggplot(mtcars, aes(gear, mpg, colour = factor(gear)) +
    geom_point() +
    geom_line() +
    theme(legend.position = "none",
          panel.background = element_blank(), 
          panel.grid.major = element_blank(), 
          panel.grid.minor = element_blank(), 
          axis.text.x = element_blank(),
          axis.text.y = element_blank(),
          axis.ticks = element_blank(),
          plot.margin=unit(c(0,1,-0.4,0.7), "cm")) +
    xlab("") + ylab("")

實現最佳擬合是在每個圖中管理邊距。

然后,空情節

empty <- ggplot()+geom_point(aes(1,1), colour="white")+
    theme(axis.ticks=element_blank(), 
          panel.background=element_blank(), 
          axis.text.x=element_blank(), axis.text.y=element_blank(),           
          axis.title.x=element_blank(), axis.title.y=element_blank())

所以,加入一切

grid.arrange(horizontal, empty, plot, vertical, ncol=2, nrow=2, 
             widths=c(1, 0.05), heights=c(0.5, 4))

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM