简体   繁体   中英

Two plots in one plot with ggplot

I need to create "two plots" in "one plot" with ggplot. I managed to do it with base R as follows:

x=rnorm(10)
y=rnorm(10)*20+100

plot(1:10,rev(sort(x)),cex=2,col='red',ylim=c(0,2.2))
  segments(x0=1:10, x1=1:10, y0=1.8,y1=1.8+y/max(y)*.2,lwd=3,col='dodgerblue')

However, I am struggling with ggplot, how can it be done?

Here's one possible translation of that code.

ggplot(data.frame(idx=seq_along(x), x,y)) +
  geom_point(aes(idx, rev(sort(x))), col="red") + 
  geom_segment(aes(x=idx, xend=idx, y=1.8, yend=1.8+y/max(y)*.2), color="dodgerblue")

在此处输入图片说明

In general with ggplot2, you can add multiple views of data to a plot by adding additional layers (geoms)

My solution is similar to @MrFlick.

I would always recommend having a plot data frame and referring to the variables from there as you can more easily relate variables to plot aesthetics.

library(tidyverse)
plot_df <- data.frame(x, y) %>%
    arrange(-x) %>%
    mutate(id = 1:10)

ggplot(plot_df) +
    geom_point(aes(id, x), color = "red", pch = 1, size = 5) +
    geom_segment(aes(x = id, xend = id, y = 1.8, yend = 1.8+y/max(y)*.2), 
                     lwd = 2, color = 'dodgerblue') +
    scale_y_continuous(limits = c(0,2.2)) +
    theme_light()

结果图

Ultimately, the goal of ggplot is to add aesthetics (in this case, the points and the segments) to form the final plot.

If you'd like to learn more, check out the ggplot cheat sheet and read more on the ideas behind ggplot: https://ggplot2.tidyverse.org/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM