I am creating the following graph with ggplot2. The problem is that all labels show in the chronological order except the last three. I cannot work around it. Does anyone see what causes the issue and how to circumvent it?
quarterly_dates <- seq(start_date, end_date, by = "3 months")
random_numbers <- runif(length(quarterly_dates), min = 30, max = 60)
approval_q_graph = data.frame(cbind(quarterly_dates,random_numbers))
colnames(approval_q_graph) = c("End Date","Approval")
plot3=ggplot() +
geom_line(aes(x = approval_q_graph$`End Date`, y =approval_q_graph$Approval))+
theme_classic() +
labs(title="Presidential Approval Rating Quarterly",subtitle="Gallup; 1953-2023")+xlab("Time")+ylab("Percent")+
geom_rect(aes(xmin=as.Date("1953-01-01"),xmax=as.Date("1961-01-01")
,fill="bisque"),ymin=0,ymax=100, size=0.5, alpha=0.1) +
geom_rect(aes(xmin=as.Date("1961-01-01"),xmax=as.Date("1963-10-01")
,fill="black"),ymin=0,ymax=100, size=0.5, alpha=0.1) +
geom_rect(aes(xmin=as.Date("1963-10-01"),xmax=as.Date("1969-01-01")
,fill="blue"),ymin=0,ymax=100, size=0.5, alpha=0.1) +
geom_rect(aes(xmin=as.Date("1969-01-01"),xmax=as.Date("1974-10-01")
,fill="brown"),ymin=0,ymax=100, size=0.5, alpha=0.1) +
geom_rect(aes(xmin=as.Date("1974-10-01"),xmax=as.Date("1977-01-01")
,fill="cyan"),ymin=0,ymax=100, size=0.5, alpha=0.1) +
geom_rect(aes(xmin=as.Date("1977-01-01"),xmax=as.Date("1981-01-01")
,fill="green"),ymin=0,ymax=100, size=0.5, alpha=0.1) +
geom_rect(aes(xmin=as.Date("1981-01-01"),xmax=as.Date("1989-01-01")
,fill="orange"),ymin=0,ymax=100, size=0.5, alpha=0.1) +
geom_rect(aes(xmin=as.Date("1989-01-01"),xmax=as.Date("1993-01-01")
,fill="pink"),ymin=0,ymax=100, size=0.5, alpha=0.1) +
geom_rect(aes(xmin=as.Date("1993-01-01"),xmax=as.Date("2001-01-01")
,fill="purple"),ymin=0,ymax=100, size=0.5, alpha=0.1) +
geom_rect(aes(xmin=as.Date("2001-01-01"),xmax=as.Date("2009-01-01")
,fill="red"),ymin=0,ymax=100, size=0.5, alpha=0.1) +
geom_rect(aes(xmin=as.Date("2009-01-01"),xmax=as.Date("2017-01-01")
,fill="yellow"),ymin=0,ymax=100, size=0.5, alpha=0.1) +
geom_rect(aes(xmin=as.Date("2017-01-01"),xmax=as.Date("2021-01-01")
,fill="sienna"),ymin=0,ymax=100, size=0.5, alpha=0.1) +
geom_rect(aes(xmin=as.Date("2021-01-01"),xmax=as.Date("2023-10-01")
,fill="royalblue1"),ymin=0,ymax=100, size=0.5, alpha=0.1) +
scale_fill_identity(labels = c(
bisque = "Eisenhower",
black = "Kennedy", blue = "Johnson",
brown = "Nixon", cyan = "Ford",
green = "Carter", orange = "Reagan",
pink = "Bush Senior", purple = "Clinton",
red = "Bush Junior", yellow = "Obama", sienna = "Trump",royalblue1 = "Biden"
),guide="legend",name=NULL,aesthetics = "fill")
print(plot3)
Alternatively:
dput(approval_q_graph)
gives the following output:
structure(list(Approval = c(67.5, 73.6666666666667, 69.25, 63.5,
68.5, 62.75, 67.2, 62.3333333333333, 70, 68.75, 72.5, 76.5, 75,
71, 69, 77, 70.5, 64.25, 61.8, 57.5, 55.75, 52.25, 55.4, 55.3333333333333,
58, 62, 64.6666666666667, 69, 64.6666666666667, 63.25, 58.5,
60.25, 72.5, 76.3333333333333, 76.6666666666667, 77.6666666666667,
78.6666666666667, 74, 66.25, 70.3333333333333, 70.3333333333333,
64, 59.6666666666667, 67, 76.4, 74.4285714285714, 69.5, 69.2,
67, 64.25, 64, 58.2, 49.5, 50, 45.25, 45.75, 46.8, 41, 41.75,
41.5, 44.75, 39.25, 43.5, 58.25, 62.6666666666667, 60.6, 59.75,
59.6, 56.75, 55.8, 55.6666666666667, 51.6666666666667, 49, 49.5,
50.3333333333333, 52.5, 57.75, 60.5, 61, 48, 34.6, 28.8, 26.5,
25.875, 43.8333333333333, 48.6, 38, 45.2, 45.3333333333333, 44,
47, 46.6666666666667, 53, 70.8, 64.1428571428571, 61.8, 55.2857142857143,
50.5, 42.7142857142857, 42, 50.5, 42.8571428571429, 33.4, 30.6666666666667,
38.2857142857143, 50.5, 36.8333333333333, 34, 32.5, 55.3333333333333,
63, 57.6, 52.2, 47.25, 44.3333333333333, 41.6, 42.25, 38, 43.8333333333333,
44.2857142857143, 50.25, 54, 53.8, 54.5714285714286, 58.8, 60.5,
55, 61.25, 63.25, 63.5, 63.75, 62, 52.6666666666667, 46, 49.3333333333333,
47.6666666666667, 50, 50, 49.4, 52.6666666666667, 56.25, 56.6666666666667,
61.75, 68.3333333333333, 69.6666666666667, 73.6, 67.2, 70.8888888888889,
58.1, 79.7142857142857, 75.5555555555556, 70.1111111111111, 58.4,
43, 39.1428571428571, 35.7142857142857, 41.6, 54.7142857142857,
44.3333333333333, 46.1428571428571, 49.625, 52.75, 48.1666666666667,
41.5714285714286, 43, 45.6, 48.4, 46.2857142857143, 50.2, 49.8333333333333,
54.6666666666667, 56.7142857142857, 57, 59.2, 55.75, 59.6, 58,
62.8888888888889, 61.75, 63.375, 65.7, 66.1818181818182, 58.7777777777778,
59.875, 57.5, 61, 58.3333333333333, 59.25, 60.8, 60.125, 56.5714285714286,
61.6, 87.125, 81.1, 75.0833333333333, 68.9166666666667, 64.4545454545455,
61.4666666666667, 66.5, 57.1428571428571, 54.7777777777778, 52.7,
49, 50.25, 50.5, 51.3, 47.5454545454545, 44.7272727272727, 40.6,
40.125, 35.25, 39.8571428571429, 37, 34.75, 34.1666666666667,
32.5, 32.8571428571429, 32.5, 28.4285714285714, 30.8571428571429,
28, 60.9090909090909, 62.6153846153846, 54.3846153846154, 51.3846153846154,
49.4615384615385, 47.6923076923077, 44.9230769230769, 45.3846153846154,
47.8461538461538, 46.7692307692308, 42.2307692307692, 42.3076923076923,
45.4615384615385, 47, 46.5714285714286, 51.7692307692308, 50.5384615384615,
48.5384615384615, 45.2307692307692, 41.7692307692308, 41.8461538461538,
43.3846153846154, 41.8461538461538, 42.3846153846154, 46.3076923076923,
46.4615384615385, 46, 46.5384615384615, 48.5384615384615, 51.1538461538462,
51.3076923076923, 54.8461538461538, 46.2307692307692, 39.3076923076923,
37.3076923076923, 36.8571428571429, 38.5, 41.2307692307692, 40.8571428571429,
40.5833333333333, 40, 42.8333333333333, 41.5, 42, 47, 43.6, 42.75,
42.75, 50.25, 55.6666666666667, 47.3333333333333, 42.3333333333333,
41, 41, 41.3333333333333, 40, 41, 39.6666666666667, 41), `End Date` = c(-6209,
-6119, -6028, -5936, -5844, -5754, -5663, -5571, -5479, -5389,
-5298, -5206, -5114, -5023, -4932, -4840, -4748, -4658, -4567,
-4475, -4383, -4293, -4202, -4110, -4018, -3928, -3837, -3745,
-3653, -3562, -3471, -3379, -3287, -3197, -3106, -3014, -2922,
-2832, -2741, -2649, -2557, -2467, -2376, -2284, -2192, -2101,
-1918, -1826, -1736, -1645, -1553, -1461, -1371, -1280, -1188,
-1096, -1006, -915, -823, -731, -640, -549, -457, -365, -275,
-184, -92, 0, 90, 181, 273, 365, 455, 546, 638, 730, 821, 1004,
1096, 1186, 1277, 1369, 1461, 1551, 1642, 1734, 1826, 1916, 2007,
2099, 2191, 2282, 2465, 2557, 2647, 2738, 2830, 2922, 3012, 3103,
3195, 3287, 3377, 3468, 3560, 3652, 3743, 3834, 3926, 4018, 4108,
4199, 4291, 4383, 4473, 4564, 4656, 4748, 4838, 4929, 5021, 5113,
5204, 5295, 5387, 5479, 5569, 5660, 5752, 5844, 5934, 6025, 6117,
6209, 6299, 6390, 6482, 6574, 6665, 6756, 6848, 6940, 7030, 7121,
7213, 7305, 7395, 7486, 7578, 7670, 7760, 7851, 7943, 8035, 8126,
8217, 8309, 8401, 8491, 8582, 8674, 8766, 8856, 8947, 9039, 9131,
9221, 9312, 9404, 9496, 9587, 9678, 9770, 9862, 9952, 10043,
10135, 10227, 10317, 10408, 10500, 10592, 10682, 10773, 10865,
10957, 11048, 11139, 11231, 11323, 11413, 11504, 11596, 11688,
11778, 11869, 11961, 12053, 12143, 12234, 12326, 12418, 12509,
12600, 12692, 12784, 12874, 12965, 13057, 13149, 13239, 13330,
13422, 13514, 13604, 13695, 13787, 13879, 13970, 14061, 14153,
14245, 14335, 14426, 14518, 14610, 14700, 14791, 14883, 14975,
15065, 15156, 15248, 15340, 15431, 15522, 15614, 15706, 15796,
15887, 15979, 16071, 16161, 16252, 16344, 16436, 16526, 16617,
16709, 16801, 16892, 16983, 17075, 17167, 17257, 17348, 17440,
17532, 17622, 17713, 17805, 17897, 17987, 18078, 18170, 18262,
18353, 18444, 18536, 18628, 18718, 18809, 18901, 18993, 19083,
19174, 19266, 19358, 19448, 19539)), class = "data.frame", row.names = c(NA,
-280L))
Here is a nicer approach:
approval_q_graph$`End Date` <- as.Date(approval_q_graph$`End Date`) #assuming this is days since 1970-01-01
boxes <- data.frame(xmin = as.Date(c("1953-01-01", "1961-01-01", "1963-10-01",
"1969-01-01", "1974-10-01", "1977-01-01",
"1981-01-01", "1989-01-01", "1993-01-01",
"2001-01-01", "2009-01-01", "2017-01-01",
"2021-01-01")),
xmax = as.Date(c("1961-01-01", "1963-10-01",
"1969-01-01", "1974-10-01", "1977-01-01",
"1981-01-01", "1989-01-01", "1993-01-01",
"2001-01-01", "2009-01-01", "2017-01-01",
"2021-01-01", "2023-10-01")),
President = ordered(1:13, labels = c("Eisenhower",
"Kennedy", "Johnson",
"Nixon","Ford",
"Carter","Reagan",
"Bush Senior", "Clinton",
"Bush Junior", "Obama",
"Trump","Biden"))
)
ggplot(approval_q_graph) +
geom_rect(data = boxes,
aes(xmin = xmin, xmax = xmax, ymin = 0, ymax = 100, fill = President),
alpha = 0.1) + #plot the rectangles before the line is plotted
geom_line(aes(x = `End Date`, y = Approval))+
theme_classic() +
labs(title="Presidential Approval Rating Quarterly",subtitle="Gallup; 1953-2023")+
xlab("Time")+ylab("Percent") +
scale_fill_manual(values = setNames(c("bisque", "black", "blue", "brown", "cyan", "green",
"orange", "pink", "purple", "red", "yellow", "sienna", "royalblue1"),
levels(boxes$President)))