2013-08-28 3 views
2

R 차트에 축 레이블을 여러 줄로 포함 할 수 있습니까? 이 아래 링크에 나타나는gplot2에서 x 축 레이블이 여러 줄로 배열

내가 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")) 
+2

레이블에 구분 기호로' "\ n"을 사용하면 두 줄로 표시됩니다 – baptiste

+0

또 다른 옵션은 원하는만큼의 라인을 가질 수있는 그래프의 하단에 테이블을 만드는 것입니다. 이렇게하려면 다음 예를 따르십시오. http://learnr.wordpress.com/2009/04/29/ggplot2-labelling-data-series-and-adding-a-data-table/ – amzu

+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")) 
0

쿼터를 날짜로 변환하면 모양이 좋다고 생각되는대로 축척을 쉽게 변경할 수 있습니다. (당신이 원하는대로 나는 Q1 = 월 1 일, 변화를 말하는거야)

날짜에 숙소를 변경하려면 약간의 확인 지금

dateticks <- seq(firstObs, lastObs, by="8 month") 

그리고 :

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)] 

그런 다음 축 단위를 선택 플롯 변경 사항 :

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")) 
관련 문제