簡體   English   中英

R ggplot2:“ scale_x_time”-x軸上的標簽從每月的第一天移動到最后一天

[英]R ggplot2: “scale_x_time” - labels on x-axis shift from 1st to last day of month

我遇到了R中日期時間x軸的問題。我想休息到每個月的1號。 但是,它只能顯示到3月-然后,該圖不會顯示4月1日,而是顯示“ 3月31日”,並且僅繼續顯示該月的最后一天(請參見下圖),我已經搜索了一段時間,並嘗試不同的方法(xlim,設置中斷序列等),使用帶有scale_x_date的date列而不是POSIX.ct。什么都沒有用。

我想保留POSIXct格式和限制,因為我正在相互之間繪制不同的圖(包括需要POSIXct格式的數據)。

任何幫助將不勝感激。 最好的問候,tofeta

該圖顯示了繪圖結果和問題

更新代碼和數據

碼:

## Plot d
d$Date <- as.Date(d$Date, format="%d.%m.%Y")
d$timestep <- as.POSIXct(paste(d$Date, "00:00"), format="%Y-%m-%d %H:%S")

ggplot()+geom_line(aes(x=d$timestep, y=d$Mean_Temp),
                    (scale_x_datetime(labels = date_format("%d-%b"),
                    limits = c(as.POSIXct("2016-01-01"),
                               as.POSIXct("2016-05-31")),expand = c(0,0), 
                              date_breaks="months"))

 ## Plot d1
 d1$timestep <- (as.POSIXct(d1$timestep, format="%m.%d.%y %H:%M:%S"))

ggplot(data=d1, aes(x=d1$timestep, y=d1$q))+ 
  geom_line()+
  scale_x_datetime(labels = date_format("%d-%b"),
                   limits = c(as.POSIXct("2016-01-01"),
                              as.POSIXct("2016-05-31")),
                   expand = c(0,0), 
                   date_breaks="months")

這是我的數據(我無法使用最少的數據集重現此錯誤,因此這是一個子集:)

# d1

structure(list(Date = structure(c(1L, 6L, 11L, 16L, 21L, 26L, 
31L, 36L, 41L, 46L, 51L, 56L, 61L, 66L, 71L, 76L, 81L, 86L, 91L, 
96L, 101L, 106L, 111L, 116L, 121L, 126L, 131L, 136L, 141L, 146L, 
150L, 2L, 7L, 12L, 17L, 22L, 27L, 32L, 37L, 42L, 47L, 52L, 57L, 
62L, 67L, 72L, 77L, 82L, 87L, 92L, 97L, 102L, 107L, 112L, 117L, 
122L, 127L, 132L, 137L, 142L, 3L, 8L, 13L, 18L, 23L, 28L, 33L, 
38L, 43L, 48L, 53L, 58L, 63L, 68L, 73L, 78L, 83L, 88L, 93L, 98L, 
103L, 108L, 113L, 118L, 123L, 128L, 133L, 138L, 143L, 147L, 151L, 
4L, 9L, 14L, 19L, 24L, 29L, 34L, 39L, 44L, 49L, 54L, 59L, 64L, 
69L, 74L, 79L, 84L, 89L, 94L, 99L, 104L, 109L, 114L, 119L, 124L, 
129L, 134L, 139L, 144L, 148L, 5L, 10L, 15L, 20L, 25L, 30L, 35L, 
40L, 45L, 50L, 55L, 60L, 65L, 70L, 75L, 80L, 85L, 90L, 95L, 100L, 
105L, 110L, 115L, 120L, 125L, 130L, 135L, 140L, 145L, 149L, 152L
), .Label = c("01.01.2016", "01.02.2016", "01.03.2016", "01.04.2016", 
"01.05.2016", "02.01.2016", "02.02.2016", "02.03.2016", "02.04.2016", 
"02.05.2016", "03.01.2016", "03.02.2016", "03.03.2016", "03.04.2016", 
"03.05.2016", "04.01.2016", "04.02.2016", "04.03.2016", "04.04.2016", 
"04.05.2016", "05.01.2016", "05.02.2016", "05.03.2016", "05.04.2016", 
"05.05.2016", "06.01.2016", "06.02.2016", "06.03.2016", "06.04.2016", 
"06.05.2016", "07.01.2016", "07.02.2016", "07.03.2016", "07.04.2016", 
"07.05.2016", "08.01.2016", "08.02.2016", "08.03.2016", "08.04.2016", 
"08.05.2016", "09.01.2016", "09.02.2016", "09.03.2016", "09.04.2016", 
"09.05.2016", "10.01.2016", "10.02.2016", "10.03.2016", "10.04.2016", 
"10.05.2016", "11.01.2016", "11.02.2016", "11.03.2016", "11.04.2016", 
"11.05.2016", "12.01.2016", "12.02.2016", "12.03.2016", "12.04.2016", 
"12.05.2016", "13.01.2016", "13.02.2016", "13.03.2016", "13.04.2016", 
"13.05.2016", "14.01.2016", "14.02.2016", "14.03.2016", "14.04.2016", 
"14.05.2016", "15.01.2016", "15.02.2016", "15.03.2016", "15.04.2016", 
"15.05.2016", "16.01.2016", "16.02.2016", "16.03.2016", "16.04.2016", 
"16.05.2016", "17.01.2016", "17.02.2016", "17.03.2016", "17.04.2016", 
"17.05.2016", "18.01.2016", "18.02.2016", "18.03.2016", "18.04.2016", 
"18.05.2016", "19.01.2016", "19.02.2016", "19.03.2016", "19.04.2016", 
"19.05.2016", "20.01.2016", "20.02.2016", "20.03.2016", "20.04.2016", 
"20.05.2016", "21.01.2016", "21.02.2016", "21.03.2016", "21.04.2016", 
"21.05.2016", "22.01.2016", "22.02.2016", "22.03.2016", "22.04.2016", 
"22.05.2016", "23.01.2016", "23.02.2016", "23.03.2016", "23.04.2016", 
"23.05.2016", "24.01.2016", "24.02.2016", "24.03.2016", "24.04.2016", 
"24.05.2016", "25.01.2016", "25.02.2016", "25.03.2016", "25.04.2016", 
"25.05.2016", "26.01.2016", "26.02.2016", "26.03.2016", "26.04.2016", 
"26.05.2016", "27.01.2016", "27.02.2016", "27.03.2016", "27.04.2016", 
"27.05.2016", "28.01.2016", "28.02.2016", "28.03.2016", "28.04.2016", 
"28.05.2016", "29.01.2016", "29.02.2016", "29.03.2016", "29.04.2016", 
"29.05.2016", "30.01.2016", "30.03.2016", "30.04.2016", "30.05.2016", 
"31.01.2016", "31.03.2016", "31.05.2016"), class = "factor"), 
Mean_Temp = c(-12.9, -10.4, -10.2, -13.7, -9.4, -11.5, -11.9, 
-10.4, -14.3, -20.5, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, -19.7, -17.6, -15.3, -13, -13.9, 
-14.3, -15.8, -21.5, -27.4, -30.6, -28.6, -24.4, -28.4, -23.1, 
-20, -18.7, NA, -13.8, -19.8, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, -16.2, -16.3, -11.5, -10.7, NA, -20.2, -20.2, -17.9, 
-21.1, -23.9, -26.2, -19.8, -25.1, -28.4, -24.2, -18.7, -18.4, 
-14.4, -16, -18.1, -21.1, -22.1, -23.4, -23.5, -23.8, -22.3, 
-22.2, -21.2, -18.8, -12.6, -15.1, -14.8, -13.7, NA, -18.3, 
-21.5, -23.8, -22.7, -25.1, -21.4, -18.7, -21.4, -16.4, -16.6, 
-16.1, -17.9, -15.3, -13.9, -16.3, -17.4, -12.4, -15.7, -18.2, 
-15.1, -7.2, -6, -10.5, -12.1, -13, -12.6, -10, -6.1, -3.4, 
-4.7, -2.5, -3.5, -1.3, -3.8, -3.8, -0.5, -1.4, -3.5, -4.1, 
-3.6, -1.6, -1, -1.4, -2.2, NA, 4.4, 3.5, 2.5, -0.7, -0.6, 
0.3, -1.7, 0.5, 3.4, 3.4, 1, NA, -0.1, 1.5, 1.7, NA, -0.3, 
-0.8, 1.8, 1.5)), .Names = c("Date", "Mean_Temp"), class = "data.frame", 
row.names = c(NA, 
-152L))

#d1

structure(list(timestep = structure(1:58, .Label = c("05.14.16 09:00:00", 
"05.14.16 09:30:00", "05.14.16 10:00:00", "05.14.16 10:30:00", 
"05.14.16 11:00:00", "05.14.16 11:30:00", "05.14.16 12:00:00", 
"05.14.16 12:30:00", "05.14.16 13:00:00", "05.14.16 13:30:00", 
"05.14.16 14:00:00", "05.14.16 14:30:00", "05.14.16 15:00:00", 
"05.14.16 15:30:00", "05.14.16 16:00:00", "05.14.16 16:30:00", 
"05.14.16 17:00:00", "05.14.16 17:30:00", "05.14.16 18:00:00", 
"05.14.16 18:30:00", "05.14.16 19:00:00", "05.14.16 19:30:00", 
"05.14.16 20:00:00", "05.14.16 20:30:00", "05.14.16 21:00:00", 
"05.14.16 21:30:00", "05.14.16 22:00:00", "05.14.16 22:30:00", 
"05.14.16 23:00:00", "05.14.16 23:30:00", "05.15.16 00:00:00", 
"05.15.16 00:30:00", "05.15.16 01:00:00", "05.15.16 01:30:00", 
"05.15.16 02:00:00", "05.15.16 02:30:00", "05.15.16 03:00:00", 
"05.15.16 03:30:00", "05.15.16 04:00:00", "05.15.16 04:30:00", 
"05.15.16 05:00:00", "05.15.16 05:30:00", "05.15.16 06:00:00", 
"05.15.16 06:30:00", "05.15.16 07:00:00", "05.15.16 07:30:00", 
"05.15.16 08:00:00", "05.15.16 08:30:00", "05.15.16 09:00:00", 
"05.15.16 09:30:00", "05.15.16 10:00:00", "05.15.16 10:30:00", 
"05.15.16 11:00:00", "05.15.16 11:30:00", "05.15.16 12:00:00", 
"05.15.16 12:30:00", "05.15.16 13:00:00", "05.15.16 13:30:00"
), class = "factor"), q = c(0.37726, 0.37618, 0.37943, 0.37943, 
0.38161, 0.38161, 0.37943, 0.37726, 0.37943, 0.37943, 0.37943, 
0.37835, 0.37943, 0.38161, 0.38598, 0.38052, 0.38052, 0.38379, 
0.37726, 0.37943, 0.37835, 0.37618, 0.37402, 0.37618, 0.37835, 
0.37726, 0.37835, 0.37943, 0.37618, 0.3751, 0.37294, 0.37294, 
0.37294, 0.36758, 0.36544, 0.36544, 0.36544, 0.36225, 0.36013, 
0.36225, 0.36013, 0.36225, 0.36119, 0.35907, 0.35907, 0.35696, 
0.35801, 0.36119, 0.35907, 0.36225, 0.36119, 0.35907, 0.35696, 
0.35696, 0.35696, 0.35696, 0.35801, 0.35485)), .Names = c("timestep", 
"q"), class = "data.frame", row.names = c(NA, -58L))

非常感謝。

您的代碼有很多奇怪的事情。 如果您每天都有數據,我認為您無需設置限制。 您可以將帶date_labels參數的標簽設置為scale_x_date ,而不是labels geom_line不采用fill參數。 對於參數date_breaks使用"1 month" ,而不是"months" 我還建議您查看樣式指南,以便更輕松地查看代碼中哪些參數屬於哪些函數。 還請注意,我從未設法得到您提到的這種轉移錯誤; 這就是為什么如評論員所說的那樣,提供一個可復制的例子很重要。

library(tidyverse)
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following object is masked from 'package:base':
#> 
#>     date
tbl <- tibble(
  day = seq.Date(ymd("2016-01-01"), ymd("2017-01-01"), by = 1)
) %>%
  mutate(temp = rnorm(nrow(.), mean = 0, sd = 15))

ggplot(tbl) +
  geom_line(aes(x = day, y = temp), color="#D55E00") +
  scale_x_date(date_breaks = "1 month", date_labels = "%d-%b")

reprex軟件包 (v0.2.0)於2018-02-27創建。

我更改了代碼的這一部分:

 labels = date_format("%d-%b") 

至:

date_labels = "%d-%b"  

那就成功了。

也許這可以幫助遇到類似問題的其他人。

暫無
暫無

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

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