Бокплоты предполагают, что групповая переменная является фактором, поэтому отметки по оси x равны seq (1, n), где n - количество уровней фактора. Ваши данные general_vo c имеют только 4 уровня для Месяца, и они расположены на позициях 1, 2, 3 и 4 оси X. Ваш второй график использует месяц на оси X, переменную Numberri c, и уникальными значениями являются 2, 3, 4, 5 и 6. Начало нового графика с параметром par (new = TRUE) будет игнорировать значения предыдущих осей.
Решение состоит в том, чтобы поместить все в один и тот же фрейм данных, используйте points()
для построения второго графика, но используйте месяц как фактор, чтобы значения совпали с предыдущим блокпостом.
library(dplyr)
data <- full_join(general_voc, mean_temp, by="month")
par(mar=c(2, 5, 1, 4))
boxplot(data=data, daily_voc~month, na.action="na.pass",
xlab='', ylab='',
ylim=c(0,25),
type = 'l',
main='',cex=0.1,yaxt='n',
ann = FALSE, xaxt='n')
axis(side=1, at=1:5, labels=month.abb[sort(unique(data$month))])
axis(2, ylim=c(0,max(general_voc$daily_voc,na.rm = T)),
col='black',lwd=0.2,cex = 0.8,las=1)
mtext(2,text='Total BVOC (ppb)', line=2.5,
col="black",cex = 1.2,las=0)
points(data=data, temp~factor(month),
xlab='', ylab='',
type = 'p',
main='',cex=0.8, yaxt='n',
xaxt='n')
![enter image description here](https://i.stack.imgur.com/NKvrf.png)
Данные :
general_voc <- structure(list(day = c(1L, 1L, 1L, 2L, 2L, 2L), month = c(3L,
5L, 6L, 3L, 4L, 5L), daily_voc = c(19.2, 11.9, 0.247, 15.7, 0,
13.6), avg_temp = c(23.2, 17.9, 13.8, 23.2, 19.8, 19.7), avg_voc = c(1.2,
0.853, 0.0145, 1.3, 0, 0.905), Month = structure(c(3L, 4L, 2L,
3L, 1L, 4L), .Label = c("Apr", "Jun", "Mar", "May"), class = "factor")), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))
mean_temp <- structure(list(month = 2:6, temp = c(22.4, 20.6, 18.3, 15, 11.8
)), class = "data.frame", row.names = c("1", "2", "3", "4", "5"
))