是否可以在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"))
答案 0 :(得分:1)
一种解决方案是专门为您的标签创建一个列:我选择仅包含每四个标签。另请注意,我已添加“\ 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"))
答案 1 :(得分:0)
如果您将季度转换为日期,您可以轻松地将轴的比例更改为您认为看起来不错的任何内容。
将季度更改为日期(我说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"))