簡體   English   中英

更改 ggplot 中 x 軸標簽的順序

[英]Changing order of x-axis labels in ggplot

我的日期為'Dec-17','Jan-18','Feb-18','Mar-18','Apr-18','May-18','Jun-18','Jul-18','Aug-18'當我繪圖時,我需要將其保留在 x 軸上。 但是 x 軸正在重新排序。 我嘗試了因素方法,然后我也得到了相同的結果:

> data_$Dates
[1] Apr-18 Aug-18 Dec-17 Feb-18 Jan-18 Jul-18 Jun-18 Mar-18 May-18
9 Levels: Apr-18 Aug-18 Dec-17 Feb-18 Jan-18 Jul-18 Jun-18 ... May-18

但是,我需要從Dec-17而不是Apr-18 Dec-17開始遵循相同的格式我的代碼:

data_$Dates <- factor(data_$Dates, levels = data_$Dates[order(data_$`Expected`)])
data_$Dates
ggplot(data=data_, aes(x=Dates, y=`Expected`, group=1)) +
  geom_line()+
  geom_point()

您正在按字母順序重新排序。 您可能希望將數據轉換為這樣解釋的數據類型(如@Wimpel 在他/她的評論中所建議的那樣)。 或者,由於您只有 9 個唯一值,您可能需要手動重新排序:

date_$Dates <- factor(date_$Dates, levels = c("Dec-17", "Jan-18", "Feb-18"))

(您必須擴展以包括我省略的六個月)。

讓我們先生成一些示例數據:

set.seed(123)
data_ <- data.frame(Expected = sample(1:10, 9), Dates = c('Dec-17','Jan-18',
    'Feb-18','Mar-18', 'Apr-18', 'May-18','Jun-18', 'Jul-18', 'Aug-18'),
    stringsAsFactors = FALSE)

正如@Wimpel 所說,最自然的方法是將數據列轉換為數據類型列。 在這里,您可以找到有關可能的方法的全面討論。 最方便的解決方案之一是使用 lubridate 包:

library(lubridate)
data_$Dates_data <-  as.Date(parse_date_time(data_$Dates, "m-y"))

現在您有一個日期格式的列用作 x 數據,您可以根據自己的喜好調整 x 標簽的格式(同樣,正如@Wimpel 建議的那樣):

pl_1 <- ggplot(data = data_, aes(x = Dates_data, y = Expected, 
    group = 1)) +
  geom_line() +
  geom_point() +
  scale_x_date(date_labels = "%b-%y", date_breaks = "1 month")
plot(pl_1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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