当前位置: 首页 > 知识库问答 >
问题:

自动设置数据代表中断ggplots与facet_grid

从开济
2023-03-14

以下是一个可复制的示例,摘自R图形库:

library(ggplot2)
library(dplyr) 
library(viridis) 
library(Interpol.T) 
library(lubridate) 
library(ggExtra) 
library(tidyr) 


data <- data(Trentino_hourly_T,package = "Interpol.T")

names(h_d_t)[1:5]<- c("stationid","date","hour","temp","flag")
df <- as_tibble(h_d_t) %>%
  filter(stationid =="T0001")

df$date<-ymd(df$date)

df <- df %>% mutate(date = ymd(date),
                    year = year(date),
                    month = month(date, label=TRUE),
                    day = day(date))

rm(list=c("h_d_t","mo_bias","Tn","Tx",
          "Th_int_list","calibration_l",
          "calibration_shape","Tm_list"))

df <- df %>%
  filter(between(date, as.Date("2004-02-13"), as.Date("2004-04-29")) | between(date, as.Date("2005-02-13"), as.Date("2005-04-29")))

df <-df %>% select(stationid,day,hour,month,year,temp)%>%
  fill(temp)

statno <-unique(df$stationid)


######## Plotting starts here#####################
p <-ggplot(df, aes(day,hour,fill=temp))+
  geom_tile(color= "white",size=0.1) + 
  scale_fill_viridis(name="Hrly Temps C",option ="C") + 
  facet_grid(year~month, scales = "free") +
  scale_y_continuous(trans = "reverse", breaks = unique(df$hour)) + 
  theme_minimal(base_size = 8) + 
  labs(title= paste("Hourly Temps - Station",statno), x="Day", y="Hour Commencing") + 
  theme(legend.position = "bottom",
        plot.title=element_text(size = 14, hjust = 0),
        axis.text.y=element_text(size=6),
        strip.background = element_rect(colour="white"),
        axis.ticks=element_blank(),
        axis.text=element_text(size=7),
        legend.text=element_text(size=6))+
  removeGrid()

令我困扰的是,x轴折号没有明确显示每个月的第一天和最后一天,更糟糕的是,它们显示的是2月30日、3月0日和4月0日。

我的目标是使用一个函数,该函数自动显式显示每个绘制月份的 REAL 第一天和最后一天(示例为 2 月 13 日至 2 月 29 日、3 月 1 日至 3 月 31 日和 4 月 1 日至 4 月 29 日),每个月有 4 到 6 个Rest时间。

由于此图将显示在一个闪亮的应用程序中,用户可以在其中更改绘制的时间段,因此解决方案确实需要自动化。

以下是我尝试过的一些事情:

library(scales)
p + scale_x_continuous(breaks =breaks_pretty())

我试着写自己的函数,但是可怕的事情发生了:

breaksFUN <- function(x){
  round(seq(min(x), max(x), length.out = 5), 0)
}

p + scale_x_continuous(breaks =breaksFUN)

提前感谢。

共有1个答案

狄珂
2023-03-14

谢谢Axeman的贡献,真的很有帮助!它对我的例子有效,但是我在我的数据中尝试时遇到了一些问题。然而,我修改了它,它现在工作正常,这是我受Axeman启发的解决方案:

breaksFUN <- function(x) {
  s <- round(c(seq(min(x) + 1.5, max(x) - 5.5, length.out = 4), max(x) - 1.5))
  s[s == 0] <- 1
  s[s > 31] <- 31
  s <- round(seq(range(s)[1], range(s)[2], length.out = 5))
  unique(s)
}

p + scale_x_continuous(breaks = breaksFUN)
 类似资料:
  • 我得到了以下.js文件,它在我的网站的每个页面上都被调用,并且自动将表转换为DataTables: 当我导出一个表(即excelHtml5、pdfHtml5或print)时,我希望导出的文档标题显示该表的data-exporttitle属性(如果该表具有该属性),否则显示默认值。当前和默认情况下,标题显示页面标题。 如何修改上面的脚本才能做到这一点呢? 如果这个信息有任何帮助,我的网站上的一些页面

  • 我有一组AL约束来定位一个子vc,它有两个位置,展开和折叠。 我发现,当我添加折叠约束时,带有常量的上锚到下锚约束,当第一次创建vc时,当我激活它时,似乎有额外的间距。似乎是因为当时没有实际的高度。 当我在viewDidLayoutSubviews中添加约束时,额外的间距消失了,约束行为正常。除了现在在动画中的约束之间切换时,切换到展开约束和约束打断时,无法停用折叠的约束。可能是因为在整个过渡动画

  • 我有一个wordpress网站,主页上有一个滑块,它来自某个小部件,这个滑块是静态的,当我检查该元素时,它显示如下所示: null null 现在我想让滑块自动播放,因为我不能编辑滑块的代码,我正在尝试把一些css放在网站的头部分,这样滑块就可以播放了,我如何在css里面添加自动播放属性,请大家帮忙,提前谢谢

  • 本文向大家介绍MSSQL 2008 自动备份数据库的设置方法,包括了MSSQL 2008 自动备份数据库的设置方法的使用技巧和注意事项,需要的朋友参考一下 首先,打开MSSQL2008,然后在“管理”大类中,双击“维护计划”子类,这时候,如果以前设置过任务计划的,就会显示出任务列表;如果没有,那么什么都不会显示。 在“维护计划”上右击,选择“新建维护计划”,然后输入一个名称,这里我们输入默认名称“

  • 问题内容: 这段文字的行为完全符合我在Google Chrome浏览器(和其他现代浏览器)上的期望: 当浏览器足够宽时,a +和b +处于同一行。 缩小浏览器范围时,a +和b +放在单独的行上。 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 当b +不再适合时,它会折断并放在两行上(总共三行)。 bbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbb 太好了 但是

  • 问题内容: 我确实看到了有关为JVM设置代理的问题,但我想问的是人们如何利用已经配置的代理(在Windows上)。 这是我的问题的演示: 转到控制面板-> Java并设置代理地址。 运行以下简单的小程序代码(我正在使用Eclipse IDE): 无论您在Java控制面板中进行的设置如何,Applet均显示“无”。如果可以确定Windows代理设置(通常在Internet Explorer中设置),