Без воспроизводимого примера мне пришлось заново воссоздавать ваши данные, и они не будут точными:
library(ggplot2)
ggplot(df, aes(Tank, Salinity)) +
geom_col() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))
Если вы хотите получить приблизительно равномерный охват солености, все, что вам нужно сделать, это выяснить, как будет выглядеть идеальное оптимальное покрытие диапазона более 15 резервуаров. Другими словами, вы делите свой диапазон поровну между минимальным и максимальным диапазоном и выясняете, где будет идеальная соленость ваших 15 резервуаров:
optima <- seq(min(df$Salinity), max(df$Salinity), length.out = 15)
Теперь все, что вам нужно сделать, это найти ближайший резервуар для каждого из этих оптимумов:
optimal <- sapply(optima, function(i) which.min(abs(df$Salinity - i)))
Итак, теперь, если мы построим только эти 15 резервуаров, мы увидим, что получим гораздо более линейный охват солености:
ggplot(df[optimal, ], aes(Tank, Salinity)) +
geom_col() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))
Используемые данные
df <- structure(list(Tank = structure(1:35, .Label = c("24", "23",
"33", "2", "18", "11", "35", "34", "20", "5", "16", "10", "31",
"22", "13", "30", "9", "7", "28", "29", "21", "15", "32", "14",
"8", "6", "12", "17", "4", "27", "26", "1", "25", "19", "3"), class = "factor"),
Salinity = c(0.18, 0.4, 0.45, 0.52, 0.57, 0.62, 0.7, 0.75,
0.76, 0.78, 0.79, 0.81, 0.84, 0.86, 0.9, 0.91, 0.99, 1.01,
1.02, 1.04, 1.1, 1.2, 1.25, 1.26, 1.3, 1.31, 1.4, 1.45, 1.65,
1.78, 1.85, 1.87, 1.88, 2.2, 2.25)), row.names = c(NA, -35L
), class = "data.frame")