我正在尝试编写一行代码,在给定函数的第一个点(年)标记我的动态x轴,在函数的最后一个点(年),以合理的滴答(取决于介于两者之间。到目前为止,我已经想出了这个:
start <- 1851
end <- 2016
plot(c(start, end), c(0, 1), type = "n", xaxt = "n", yaxt = "n", bty = "n", xlab = "Year", ylab = "")
axis(1, at=c(round(seq(start, end, ((end - start) / (start / (end - start)) * 1.5)), 0), end), label = c(round(seq(start, end, ((end - start) / (start / (end - start)) * 1.5)), 0), end))
麻烦就是这个问题:
c(round(seq(start, end, ((end - start) / (start / (end - start)) * 1.5)), 0), end)
# [1] 1851 1851 1873 1895 1917 1939 1961 1983 2005 2016
问题是当第二个最后一个刻度和最后一个刻度(固定)非常靠近时,轴看起来不太好,只有第二个刻度标记,所以我尝试了:
c(start, round(seq((start + ((end - start) / (start / (end - start)) * 1.5)), (end - ((end - start) / (start / (end - start)) * 1.5)), ((end - start) / (start / (end - start)) * 1.5)), 0), end)
# [1] 1851 1873 1895 1917 1939 1961 1983 2016
除了第一个和最后一个刻度之外,这应该是固定第二个刻度线并且第二个刻度线是一个刻度尺。它适用于例如。
start <- 1860
end <- 2010
c(start, round(seq((start + ((end - start) / (start / (end - start)) * 1.5)), (end - ((end - start) / (start / (end - start)) * 1.5)), ((end - start) / (start / (end - start)) * 1.5)), 0), end)
# [1] 1860 1878 1896 1914 1933 1951 1969 1987 2010
但短期分手
start <- 1944
end <- 1966
c(start, round(seq((start + ((end - start) / (start / (end - start)) * 1.5)), (end - ((end - start) / (start / (end - start)) * 1.5)), ((end - start) / (start / (end - start)) * 1.5)), 0), end)
# [1] 1944 1944 1945 1945 1945 1946 1946 1947 1947 1947 1948 1948 1948 1949 1949 1950 1950
# [18] 1950 1951 1951 1951 1952 1952 1953 1953 1953 1954 1954 1954 1955 1955 1956 1956 1956
#[35] 1957 1957 1957 1958 1958 1959 1959 1959 1960 1960 1960 1961 1961 1962 1962 1962 1963 #[52] 1963 1963 1964 1964 1965 1965 1965 1966
对于一堆代码来说,无论周期如何都可以很好地缩放轴?