2015-10-22 2 views
2

В настоящее время я запускаю цикл для создания нескольких графиков из 1 кадра данных. Каждый график имеет переменный диапазон по оси x (что я и хочу), но я бы хотел только отметить десятилетия. Есть ли способ указать это в моем коде?R график x ось по десятичной петле

Я просмотрел другие столбцы с меткой оси x и нашел способы определения интервалов между метками, но не как указать точные числа для диапазона значений. Одним из решений было:

> axis(1, seq=(1950, 2000, by=10) 

Это прекрасно работает, если мои даты начала и окончания десятилетним лет, но они обычно не делают. Я попытался собрать сочетание вариантов, которые я нашел, однако я не могу получить полный код для запуска; Я получаю сообщения об ошибках (например, «нечисловой бинарном аргумент)

Возпроизводимо выдержка из данных:.

> df6 <- structure(list(Year = c("1958", "1959", "1960", "1961", "1962", 
"1963", "1964", "1965", "1966", "1967", "1968", "1969", "1970", 
"1971", "1972", "1972", "1973", "1973", "1974", "1974", "1975", 
"1975", "1976", "1976", "1977", "1977", "1978", "1978", "1979", 
"1979", "1980", "1980", "1981", "1981", "1982", "1982", "1983", 
"1983", "1984", "1984", "1985", "1985", "1986", "1986", "1987", 
"1987", "1988", "1988", "1989", "1989", "1990", "1990", "1991", 
"1991", "1992", "1992", "1993", "1993", "1994", "1994", "1995", 
"1995", "1996", "1996", "1997", "1997", "1998", "1998", "1999", 
"1999", "2000", "2000", "2001", "2001", "2002", "2002", "2003", 
"2003", "2004", "2004", "2005", "2005", "2006", "2006", "2007", 
"2007", "2008", "2008", "2009", "2009", "2010", "2010", "2011" 
), plot = c("FA5", "FA5", "FA5", "FA5", "FA5", "FA5", "FA5", 
"FA5", "FA5", "FA5", "FA5", "FA5", "FA5", "FA5", "BR8", "FA5", 
"BR8", "FA5", "BR8", "FA5", "BR8", "FA5", "BR8", "FA5", "BR8", 
"FA5", "BR8", "FA5", "BR8", "FA5", "BR8", "FA5", "BR8", "FA5", 
"BR8", "FA5", "BR8", "FA5", "BR8", "FA5", "BR8", "FA5", "BR8", 
"FA5", "BR8", "FA5", "BR8", "FA5", "BR8", "FA5", "BR8", "FA5", 
"BR8", "FA5", "BR8", "FA5", "BR8", "FA5", "BR8", "FA5", "BR8", 
"FA5", "BR8", "FA5", "BR8", "FA5", "BR8", "FA5", "BR8", "FA5", 
"BR8", "FA5", "BR8", "FA5", "BR8", "FA5", "BR8", "FA5", "BR8", 
"FA5", "BR8", "FA5", "BR8", "FA5", "BR8", "FA5", "BR8", "FA5", 
"BR8", "FA5", "BR8", "FA5", "FA5"), AvgRW = c(0.999, 0.671, 0.638, 
0.767, 0.839, 1.072, 1.162, 0.7215, 0.416, 0.3265, 0.464, 1.492, 
1.011, 1.0905, 0.933, 1.0755, 1.018, 1.42183333333333, 0.6415, 
1.17783333333333, 0.7495, 0.931166666666667, 0.654166666666667, 
1.761375, 0.635333333333333, 2.063875, 0.44875, 1.91758333333333, 
0.615583333333333, 0.945583333333333, 0.825857142857143, 0.60775, 
0.7095, 1.07725, 1.1536875, 1.85278571428571, 1.65311111111111, 
2.05792857142857, 1.50425, 2.6515, 1.87955, 2.25066666666667, 
2.14577272727273, 2.19533333333333, 1.61231818181818, 1.931, 
2.48027272727273, 2.31927777777778, 1.82383336363636, 2.5933, 
1.373, 3.03875, 1.36390909090909, 2.66533333333333, 1.38969441666667, 
2.70753846153846, 1.39786108333333, 2.53957692307692, 2.14262823076923, 
2.98446153846154, 2.37315478571429, 3.24507692307692, 2.37939285714286, 
3.23284615384615, 1.85764285714286, 3.59303846153846, 1.98335714285714, 
4.03557692307692, 1.34670237857143, 3.45111538461538, 0.710416664285714, 
3.47661538461538, 0.657595235714286, 2.96003846153846, 1.3541905, 
2.96257692307692, 1.81747621428571, 2.65265384615385, 1.88546428571429, 
2.53873076923077, 1.92221428571429, 2.60619230769231, 2.10236907142857, 
2.26838461538462, 1.62090476428571, 1.96623076923077, 1.61060714285714, 
2.27869230769231, 2.03883335714286, 2.00357692307692, 2.10155130769231, 
1.74626923076923, 2.61165384615385), SampDepth = c(1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 3L, 2L, 
3L, 3L, 3L, 3L, 4L, 3L, 4L, 4L, 6L, 6L, 6L, 7L, 6L, 7L, 6L, 8L, 
7L, 9L, 7L, 10L, 9L, 10L, 9L, 11L, 9L, 11L, 9L, 11L, 9L, 11L, 
10L, 11L, 10L, 11L, 12L, 12L, 13L, 12L, 13L, 13L, 13L, 14L, 13L, 
14L, 13L, 14L, 13L, 14L, 13L, 14L, 13L, 14L, 13L, 14L, 13L, 14L, 
13L, 14L, 13L, 14L, 13L, 14L, 13L, 14L, 13L, 14L, 13L, 14L, 13L, 
14L, 13L, 13L, 13L, 13L)), .Names = c("Year", "plot", "AvgRW", 
"SampDepth"), row.names = c(1143L, 1162L, 1181L, 1200L, 1219L, 
1238L, 1259L, 1281L, 1303L, 1325L, 1348L, 1371L, 1394L, 1417L, 
1440L, 1441L, 1464L, 1465L, 1488L, 1489L, 1512L, 1513L, 1536L, 
1537L, 1560L, 1561L, 1584L, 1585L, 1608L, 1609L, 1632L, 1633L, 
1656L, 1657L, 1680L, 1681L, 1704L, 1705L, 1728L, 1729L, 1752L, 
1753L, 1776L, 1777L, 1800L, 1801L, 1824L, 1825L, 1848L, 1849L, 
1872L, 1873L, 1896L, 1897L, 1920L, 1921L, 1944L, 1945L, 1968L, 
1969L, 1992L, 1993L, 2016L, 2017L, 2040L, 2041L, 2064L, 2065L, 
2088L, 2089L, 2112L, 2113L, 2136L, 2137L, 2160L, 2161L, 2184L, 
2185L, 2208L, 2209L, 2232L, 2233L, 2256L, 2257L, 2280L, 2281L, 
2304L, 2305L, 2328L, 2329L, 2352L, 2353L, 2375L), class = "data.frame") 

Текущий код участка (это работа, он просто не имеет правильную оси х этикетки):

> for (i in df6$plot) {        #Start loop 
    #Cut out the data you are working with 
    plotting <- df6[which(df6$plot == i),] 

    #Begin plotting 
    png(filename = paste0("C:\\Users\\User\\Desktop\\", i, type="png")) #Saves graphs 
    par(mar=c(5.1,4.1,4.1,5.1))    #Increase right margin 
    plot(plotting[,c(1,3)],xaxt="n", type="l", ylab="Avg RW (mm)", col="blue", ylim=c(0,4.5)) 
    abline(a=2.0, b=0, col="blue", lty=2) 

    #This will tell R how to plot the polygon (sample depth): 
    #It need the x values (years) ascending and descending 
    #It also needs y values (AvgRW) for the above 0 values as well as the 0 values 
    xx <- c(unique(plotting$Year),rev(unique(plotting$Year))) 
    yy <- c(plotting$SampDepth,rep(0,length(unique(plotting$Year)))) 

    title(main=i,line=2.5)     #add title 
    axis(1,at=as.integer(plotting$Year),labels=plotting$Year) #bottom axis 
    par(new = TRUE)         #overlay for secondary y 
    plot(plotting[,c(1,4)],xaxt="n",yaxt="n", ylab="",type="l", col=NA, ylim=c(0,35)) 
    polygon(xx, yy, border="lightgray", col=rgb(190/255, 190/255, 190/255, 0.1)) 
    abline(a=4, b=0, col="black", lty=4) 
    axis(4)           #add secondary y axis 
    mtext("Sample Depth", side = 4, line=2)   #add secondary y label 
    dev.off() 
} 

Я попытался регулировать свою метку оси, выбрав Years, которые были делится на 10, но эта корректировка приводит к «недвоичной аргументом» сообщение об ошибке:

> axis(1,at=as.integer(plotting$Year[ which(plotting$Year %% 10 = c(1:20))]), labels=plotting$Year) #bottom axis 

Любые предложения были бы полезны!

ответ

1

Использование немного другого подхода, который использует ggplot2, может быть проще. Например:

library(ggplot2) 
library(gridExtra) 

df6$Year <- as.numeric(df6$Year) 

p1 <- ggplot(df6, aes(x = Year, y = AvgRW, group = 1)) + 
    geom_line() + 
    geom_hline(aes(yintercept = 2), color = "blue", linetype = 2) + 
    facet_wrap(~ plot) 

p2 <- ggplot(df6, aes(x = Year, y = SampDepth, group = 1)) + 
    geom_line() + 
    geom_hline(aes(yintercept = 4), color = "red", linetype = 2) + 
    facet_wrap(~ plot) 

grid.arrange(p1, p2) 

Plot

Примечание: Если небольшое смещение осей вас беспокоит или это проблема, вы можете изменить grid.arrange код, используя следующий код, как описано в this SO answer:

gA <- ggplotGrob(p1) 
gB <- ggplotGrob(p2) 
maxWidth = grid::unit.pmax(gA$widths[2:5], gB$widths[2:5]) 
gA$widths[2:5] <- as.list(maxWidth) 
gB$widths[2:5] <- as.list(maxWidth) 
grid.arrange(gA, gB, ncol=1) 
+0

Хотя ggplot делает много всего, что я ищу, есть несколько недостатков, поэтому я пока не использовал его. Мне действительно нужно иметь 2 оси y для моих сюжетов, которые ggplot на самом деле не поддерживает. Это решение отлично подходит для всего 1 оси y. – KKL234

Смежные вопросы