我獲得了兩個單獨的平均圖。有沒有什么簡單的方法可以將它們組合在一個平面上,用不同的線條顏色?棘手的部分是每個都有不同的比例,所以我想把一個 ( lshare) 比例放在 y 軸的左側,另一個 ( va) 放在 y 軸的右側。
p1 <- ggplot(df, aes(x = year, y = lshare)) stat_summary(geom = "line", fun.y = mean)
p2 <- ggplot(df, aes(x = year, y = va)) stat_summary(geom = "line", fun.y = mean)
grid.arrange(p1, p2, ncol = 2)

uj5u.com熱心網友回復:
更新2:結合所有:
library(tidyverse)
mtcars %>%
select(mpg, disp) %>%
mutate(year = 1900:1931) %>%
pivot_longer(
c(mpg, disp)
) %>%
ggplot(aes(x=year, y=value, group=name, color=name))
stat_summary(fun =mean, geom="line", size=1)
scale_y_continuous(
name = "my first y axis",
sec.axis = sec_axis(~./10, name="my second y axis")
)

更新:如何按要求添加第二個 y 軸:

library(tidyverse)
mtcars %>%
select(mpg, disp) %>%
mutate(year = 1900:1931) %>%
ggplot(aes(x=year))
geom_line(aes(y=mpg*10), size=1, color="red")
geom_line(aes(y=disp), size=1, color="blue")
scale_y_continuous(
name = "my first y axis",
sec.axis = sec_axis(~./10, name="my second y axis")
)
第一個答案:
這是mtcars資料集的可重現示例:
library(tidyverse)
mtcars %>%
select(mpg, disp) %>%
mutate(year = 1900:1931) %>%
pivot_longer(
c(mpg, disp)
) %>%
ggplot(aes(x=year, y=value, group=name, color=name))
stat_summary(fun =mean, geom="line", size=1)

uj5u.com熱心網友回復:
正如@jdobres 評論的那樣,您可以使用facet_wrap(),如下例所示。只需在您的data.frame.
set.seed(1)
# sample data
year <- 1:20
lshare <- 0.50 - 0.02 * year rnorm(length(year), sd = 3)
df <- data.frame(year = c(year, year), lshare = c(lshare, lshare))
df$group <- factor(gl(2, length(year)))
# plot
ggplot(df, aes(x = year, y = lshare, colour = group))
stat_summary(geom = "line", fun.y = mean, size = 1)
facet_wrap(~ group)

添加
根據您在發布此答案后看到的編輯,facet_wrap()當您想要兩個不同的 y 軸時也可以使用。您只需使用sec_axis().
set.seed(1)
# sample data
year <- 1:20
lshare <- 0.50 - 0.02 * year rnorm(length(year), sd = 3)
noise <- abs(rnorm(length(lshare), mean = 150, sd = 100))
df <- data.frame(year = c(year, year), lshare = c(lshare, lshare noise))
df$group <- factor(gl(2, length(year)))
# set two limits
ylim_left <- with(subset(df, group == 1), c(min(lshare), max(lshare)))
ylim_right <- with(subset(df, group == 2), c(min(lshare), max(lshare)))
axis_right <- diff(ylim_left)/diff(ylim_right)
axis_left <- ylim_left[1] - axis_right * ylim_right[1]
# plot
ggplot(df, aes(x = year, y = lshare, colour = group))
stat_summary(geom = "line", fun = mean, size = 1)
facet_wrap(~ group)
scale_y_continuous(sec.axis = sec_axis(~ (. - axis_left)/axis_right))

加法2
如果您想將這兩行放在同一個窗格中,您可以使用以下代碼行中的內容。請注意,我使用與第一次添加相同的資料(見上文)。
# set two limits
ylim_left <- with(subset(df, group == 1), c(min(lshare), max(lshare)))
ylim_right <- with(subset(df, group == 2), c(min(lshare), max(lshare)))
axis_right <- diff(ylim_left)/diff(ylim_right)
axis_left <- ylim_left[1] - axis_right * ylim_right[1]
# plot
ggplot(df, aes(colour = group))
stat_summary(data = subset(df, group == 1),
mapping = aes(x = year, y = lshare),
geom = "line", fun = mean, size = 1)
stat_summary(data = subset(df, group == 2),
mapping = aes(x = year, y = lshare),
geom = "line", fun = mean, size = 1)
scale_y_continuous(sec.axis = sec_axis(~ (. - axis_left)/axis_right))
scale_colour_manual(name = 'My_groups',
values = c('1' = "blue4", '2' = "darkorange"),
labels = c('Group 1', 'Group 2'))

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/406989.html
標籤:
