Мне удалось создать следующую диаграмму в ggplot2
с помощью следующего кода:
"B", "C", "A", "B", "C", "A", "B", "C", "A", "B", "C", "A", "B",
"C", "A", "B", "C", "A", "B", "C", "A", "B", "C", "A", "B", "C",
"A", "B", "C", "A", "B", "C", "A", "B", "C"), Year = c(2008,
2008, 2008, 2009, 2009, 2009, 2010, 2010, 2010, 2011, 2011, 2011,
2012, 2012, 2012, 2013, 2013, 2013, 2014, 2014, 2014, 2015, 2015,
2015, 2016, 2016, 2016, 2017, 2017, 2017, 2018, 2018, 2018, 2019,
2019, 2019, 2020, 2020, 2020, 2021, 2021, 2021), Value = c(13,
0, 0, 23, 1, 0, 24, 5, 2, 19, 13, 4, 3, 27, 10, 0, 14, 34, 0,
4, 44, 0, 2, 49, 0, 1, 53, 0, 1, 55, 0, 1, 57, 0, 1, 57, 0, 1,
57, 0, 1, 57), Share = c(64.3873493612449, 64.3873493612449,
64.3873493612449, 60.3873493612449, 60.3873493612449, 60.3873493612449,
52.1568314927171, 52.1568314927171, 52.1568314927171, 47.1706943758496,
47.1706943758496, 47.1706943758496, 42.1444027058278, 42.1444027058278,
42.1444027058278, 37.1718223783312, 37.1718223783312, 37.1718223783312,
32.4750630408817, 32.4750630408817, 32.4750630408817, 28.3433373848839,
28.3433373848839, 28.3433373848839, 24.5584081133868, 24.5584081133868,
24.5584081133868, 21.1966663593617, 21.1966663593617, 21.1966663593617,
18.1282210145941, 18.1282210145941, 18.1282210145941, 16.6527237518679,
16.6527237518679, 16.6527237518679, 14.2045390727677, 14.2045390727677,
14.2045390727677, 12.3492805575519, 12.3492805575519, 12.3492805575519
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-42L))
# Packages
library(ggplot2)
library(dplyr)
library(tidyr)
library(readxl)
# stacked area chart
p <- ggplot(data, aes(x=Year, y=Value, fill=`Category`)) +
geom_area(alpha = 0.5)
p <- p + theme(panel.background = element_rect(fill = NA),
panel.grid.major = element_line(colour = "gray95"),
panel.border = element_rect(colour = "gray20", fill=NA, size=0.5))
# customized plot
p <- p+geom_area(colour = NA, alpha = .5) +
scale_fill_brewer(palette = "Spectral") +
geom_line(position = "stack", size = .1, color = "gray25") +
scale_x_continuous(breaks = seq(2008, 2021, by = 1),
expand = c(0,.1)) + scale_y_continuous(breaks = seq(0, 60, by = 5), expand = c(0,0)) +
labs(x = "Year", y = "Category") +
theme(axis.title.y = element_text(margin = margin(t = 0, r = 10, b = 0, l = 0))) +
theme(axis.title.x = element_text(margin = margin(t = 10, r = 0, b = 0, l = 0))) +
theme(legend.position='bottom') + theme(text=element_text(size=14, family = "serif"))
# add second axis and line
p <- p + scale_y_continuous(sec.axis = sec_axis(~.*1, name = 'Share (%)'))
p <- p + theme(axis.title.y.right = element_text(margin = margin(t = 0, r = 0, b = 0, l = 10)))
p <- p + geom_line(aes(y = `Share`/1, linetype = "Share", color = "Share"), size=0.8, linetype = "solid")
p
Теперь я хотел бы внести два изменения, которые я еще не мог понять:
geom_point
, но это добавляло баллы к каждой строке на графике.Спасибо за помощь!
Для первой части: просто добавьте две строки в конце: + labs(color = "")
(удаляет цвет термина в легенде), + theme(legend.key = element_rect(fill = "white"))
(меняет фон вокруг строки на белый).
p <- p + labs(color = "") +
theme(legend.key = element_rect(fill = "white"))
p
Для второй части: укажите aes()
в geom_point, чтобы отображать только точки вдоль красной линии:
p + geom_point(aes(x=Year, y=Share), color = "red")
Однако это также дает вам очки в легенде geom_area
. Чтобы перезаписать это:
p + guides(fill = guide_legend(override.aes = list(shape = NA)))
p
Что дает следующий сюжет:
Вы можете использовать этот код, чтобы сначала удалить термин colour
в легенде, а затем добавить красную строку общего доступа points
:
# Packages
library(ggplot2)
library(dplyr)
library(tidyr)
library(readxl)
# stacked area chart
p <- ggplot(data, aes(x=Year, y=Value, fill=`Category`)) +
geom_area(alpha = 0.5) +
theme(panel.background = element_rect(fill = NA),
panel.grid.major = element_line(colour = "gray95"),
panel.border = element_rect(colour = "gray20", fill=NA, size=0.5))
# customized plot
p <- p+geom_area(colour = NA, alpha = .5) +
scale_fill_brewer(palette = "Spectral") +
geom_line(position = "stack", size = .1, color = "gray25") +
scale_x_continuous(breaks = seq(2008, 2021, by = 1),
expand = c(0,.1)) + scale_y_continuous(breaks = seq(0, 60, by = 5), expand = c(0,0)) +
labs(x = "Year", y = "Category") +
theme(axis.title.y = element_text(margin = margin(t = 0, r = 10, b = 0, l = 0))) +
theme(axis.title.x = element_text(margin = margin(t = 10, r = 0, b = 0, l = 0))) +
theme(legend.position='bottom') + theme(text=element_text(size=14, family = "serif"))
# add second axis and line
p <- p + scale_y_continuous(sec.axis = sec_axis(~.*1, name = 'Share (%)'))
p <- p + theme(axis.title.y.right = element_text(margin = margin(t = 0, r = 0, b = 0, l = 10)))
p <- p + geom_line(aes(y = `Share`/1, linetype = "Share", color = "Share"), size=0.8, linetype = "solid") + geom_point(aes(x=Year,y=Share)) + labs(color = "") + theme(legend.key = element_rect(fill = "white"))
p
Выход:
Привет @Neicooo, не могли бы вы снова поделиться своими данными, используя
dput
?