[英]Multiple lines of labels for x-axis in ggplot2
R圖表中可以包含多行軸標簽嗎?
我想包括x軸的兩行標簽,該標簽顯示在下面的鏈接中– http://www.rita.dot.gov/bts/airfares/national/chart
在我的代碼中,我將所有季度的組合都包含為x軸標簽。 但這會使x軸標簽看起來很混亂。
有什么方法可以使x軸標簽更清晰和更具描述性,最好是在上面鏈接的圖表中顯示嗎?
這是我正在使用的代碼–
national.fare <- read.csv("http://www.rita.dot.gov/bts/airfares/national/csv",
header = TRUE)[ , 1:4]
names(national.fare) <- c("Year", "Quarter", "US_Average_Current", "US_Average_Inflation-Adjusted")
# Convert Year and Quarter as characters
national.fare$Year <- as.character(national.fare$Year)
national.fare$Quarter <- as.character(national.fare$Quarter)
# Convert to Long-version
national.fare.long <- melt(national.fare, measure.vars = c("US_Average_Current", "US_Average_Inflation-Adjusted"))
# Combine Year and Quarter for Graph
national.fare.long$Year_Quarter <- as.character(paste(national.fare.long$Year, "Q", national.fare.long$Quarter, sep = ""))
# Chart: National Average Domestic Fare Current and Inflation-Adjusted
p <- ggplot(national.fare.long, aes(x = Year_Quarter, y = value, group = variable))
p + geom_line(aes(color = variable), size = 1.5) +
scale_color_manual(values = c("navy", "red")) +
ylim(250, 500) +
ggtitle("National Average Domestic Fare 1995 - 2013") +
xlab("Year-Quarter") +
ylab("Average Domestic Fare") +
theme(legend.position = "top",
legend.key = element_rect(fill = "transparent", color = NA),
legend.title = element_blank(),
axis.title = element_text(family = "sans", color = "grey50", face = "bold"),
axis.line.x = element_line(color = "grey"),
axis.text.y = element_text(family = "sans"),
axis.text.x = element_text(family = "sans", face = "plain", hjust = 0, vjust = 1, angle = 285),
axis.ticks.x = element_line(),
panel.grid.major.y = element_line(color = "grey", size = 0.5, linetype = "dashed"),
panel.background = element_rect(fill = "transparent", color = NA),
plot.background = element_rect(fill = "transparent", color = NA),
plot.title = element_text(family = "sans", size = 18, face = "bold"))
一種解決方案是專門為標簽創建一列:我選擇僅包括每四個標簽。 還要注意,我已經添加了“ \\ n”以便將標簽放在兩個不同的行上。 最后,您使用scale_x_discrete(labels=national.fare.long$Year_Quarter_lab)
添加自定義標簽。
library(reshape)
library(ggplot2)
national.fare <- read.csv("http://www.rita.dot.gov/bts/airfares/national/csv",
header = TRUE)[ , 1:4]
names(national.fare) <- c("Year", "Quarter", "US_Average_Current", "US_Average_Inflation-Adjusted")
# Convert Year and Quarter as characters
national.fare$Year <- as.character(national.fare$Year)
national.fare$Quarter <- as.character(national.fare$Quarter)
# Convert to Long-version
national.fare.long <- melt(national.fare, measure.vars = c("US_Average_Current", "US_Average_Inflation-Adjusted"))
# Combine Year and Quarter for Graph
national.fare.long$Year_Quarter <- as.character(paste(national.fare.long$Year, "Q", national.fare.long$Quarter, sep = ""))
# Create a vector of labels with every fourth label
skip <- 0:(dim(national.fare.long)[1]-1)%%4
national.fare.long$Year_Quarter_lab <- ifelse(skip==0,as.character(paste(national.fare.long$Year, "\nQ", national.fare.long$Quarter, sep = "")),"")
# Chart: National Average Domestic Fare Current and Inflation-Adjusted
p <- ggplot(national.fare.long, aes(x = Year_Quarter, y = value, group = variable))
p + geom_line(aes(color = variable), size = 1.5) +
scale_color_manual(values = c("navy", "red")) +
scale_x_discrete(labels=national.fare.long$Year_Quarter_lab) +
ylim(250, 500) +
ggtitle("National Average Domestic Fare 1995 - 2013") +
xlab("Year-Quarter") +
ylab("Average Domestic Fare") +
theme(legend.position = "top",
legend.key = element_rect(fill = "transparent", color = NA),
legend.title = element_blank(),
axis.title = element_text(family = "sans", color = "grey50", face = "bold"),
axis.line.x = element_line(color = "grey"),
axis.text.y = element_text(family = "sans"),
axis.text.x = element_text(family = "sans", face = "plain", hjust = .5, vjust = 1, angle = 0),
axis.ticks.x = element_line(),
panel.grid.major.y = element_line(color = "grey", size = 0.5, linetype = "dashed"),
panel.background = element_rect(fill = "transparent", color = NA),
plot.background = element_rect(fill = "transparent", color = NA),
plot.title = element_text(family = "sans", size = 18, face = "bold"))
如果將季度轉換為日期,則可以輕松地將軸的刻度更改為您認為不錯的值。
要將季度更改為日期(我說Q1 = 1月1日,請根據需要更改):
library(gsubfn)
national.fare.long$Year_Q_Date <- gsubfn("Q.*",
list('Q1' = '-01-01', 'Q2' = '-04-01', 'Q3' = '-06-01', 'Q4' = '-10-01'),
national.fare.long$Year_Quarter)
national.fare.long$Year_Q_Date <- as.Date(national.fare.long$Year_Q_Date)
firstObs <- national.fare.long$Year_Q_Date[1]
lastObs <- national.fare.long$Year_Q_Date[length(national.fare.long$Year_Q_Date)]
然后選擇您的軸粒度:
dateticks <- seq(firstObs, lastObs, by="8 month")
現在對您的情節進行一些細微更改:
library(scales)
p <- ggplot(national.fare.long, aes(x = Year_Q_Date, y = value, group = variable))
p + geom_line(aes(color = variable), size = 1.5, ) +
scale_color_manual(values = c("navy", "red")) +
ylim(250, 500) +
ggtitle("National Average Domestic Fare 2001 - 2012") +
xlab("Year-Quater") +
ylab("Average Domestic Fare") +
scale_x_date(breaks=dateticks, labels=date_format("%Y %b")) +
theme(legend.position = "top",
legend.key = element_rect(fill = "transparent", color = NA),
legend.title = element_blank(),
axis.title = element_text(family = "sans", color = "grey50", face = "bold"),
axis.line.x = element_line(color = "grey"),
axis.text.y = element_text(family = "sans"),
axis.text.x = element_text(family = "sans", face = "plain", hjust = 0, vjust = 1, angle = 285),
axis.ticks.x = element_line(),
panel.grid.major.y = element_line(color = "grey", size = 0.5, linetype = "dashed"),
panel.background = element_rect(fill = "transparent", color = NA),
plot.background = element_rect(fill = "transparent", color = NA),
plot.title = element_text(family = "sans", size = 18, face = "bold"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.