簡體   English   中英

ggplot2中x軸的多行標簽

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM