С данными, предоставленными ФП, график, полученный с помощью
ggplot(mydata) +
aes(x = year, y = value, fill = coralType) +
geom_col() +
facet_grid(coralType ~ location)
![enter image description here](https://i.stack.imgur.com/QU8Sb.png)
выглядит хорошо, потому что value
является числовым.
Обратите внимание, что эстетика fill
используется вместо эстетики colour
.Кроме того, geom_col()
используется в качестве ярлыка для geom_bar(stat = "identity")
.
. Я могу воспроизвести проблему при отображении value
в виде символа (который превращается в коэффициент с помощью ggplot2
):
max_value <- 60
ggplot(mydata) +
aes(x = year, y = sprintf("%.2f %%", 100 * value / max_value),
fill = coralType) +
geom_col() +
facet_grid(coralType ~ location)
![enter image description here](https://i.stack.imgur.com/5O169.png)
Это не похоже на суматоху, как на скриншоте OP из-за ограниченного количества точек данных.
ЕслиOP хочет показывать проценты по оси Y вместо абсолютных значений, scale_y_continuous(labels = scales::percent)
может использоваться с числовыми значениями:
max_value <- 60
ggplot(mydata) +
aes(x = year, y = value / max_value, fill = coralType) +
geom_col() +
facet_grid(coralType ~ location) +
scale_y_continuous(labels = scales::percent)
![enter image description here](https://i.stack.imgur.com/P6h0t.png)
Данные
mydata <-
structure(list(location = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("site01", "site02",
"site03", "site04", "site05", "site06", "site07", "site08"), class = "factor"),
coralType = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L, 2L), .Label = c("blue corals", "hard corals",
"sea fans", "sea pens", "soft corals"), class = "factor"),
longitude = c(143.515, 143.515, 143.515, 143.515, 143.515,
143.515, 143.515, 143.515, 143.515, 143.515, 143.515, 143.515,
143.515, 143.515, 143.515), latitude = c(-11.843, -11.843,
-11.843, -11.843, -11.843, -11.843, -11.843, -11.843, -11.843,
-11.843, -11.843, -11.843, -11.843, -11.843, -11.843), year = c(2010L,
2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2011L, 2012L,
2013L, 2014L, 2015L, 2016L, 2017L), value = c(30, 30, 41,
43, 50, 54, 57, 58, 10, 11, 30, 31, 31, 32, 34)), row.names = c(NA,
15L), class = "data.frame")