R闪亮-如何在绘图上标记水平线和垂直线?(日期和数字列)

R闪亮-如何在绘图上标记水平线和垂直线?(日期和数字列),r,ggplot2,shiny,shiny-server,shinydashboard,R,Ggplot2,Shiny,Shiny Server,Shinydashboard,有人知道我如何用闪亮的颜色在绘图上标记水平线和/或垂直线吗 我的所有数据都基于过滤后的datatable,因此截距根据输入数据而变化。过滤后的数据显示在ggplot上,用户还可以选择x轴和y轴进行显示。x轴上的一个选择是日期列:这使得它很困难(加上一些列是数字/一些因素) 我的水平线和垂直线也是反应性的(取决于过滤数据) 代码: 添加x&y后 geom_text(data=txty, aes(x=1.5, y=toly[1],label=lab), size=5, angle = 90, hj

有人知道我如何用闪亮的颜色在绘图上标记水平线和/或垂直线吗

我的所有数据都基于过滤后的datatable,因此截距根据输入数据而变化。过滤后的数据显示在ggplot上,用户还可以选择x轴和y轴进行显示。x轴上的一个选择是日期列:这使得它很困难(加上一些列是数字/一些因素)

我的水平线和垂直线也是反应性的(取决于过滤数据)

代码:

添加x&y后

 geom_text(data=txty, aes(x=1.5, y=toly[1],label=lab), size=5, angle = 90, hjust = 0, vjust = 0)
对于数字列,但对于日期列,它工作正常(但是标签在比例上移动以匹配x=1.5,我真的希望它保持在x轴上的一个位置,而不管x的比例如何):

Error: Invalid input: date_trans works with objects of class Date only

我正试图找到一种解决方案,无论x轴选择了何种类型的列(数字、日期或系数),我都可以标记水平线,如果绘图的x值的类型为日期,则无论刻度上有什么数字,我都可以将标签保持在同一位置(水平线旁边),
geom_text
对象的x值也必须是
Date
类型的对象。试一试

geom_text(data=txty, aes(x=as.Date("2015-01-04"), y=toly[1], label=lab),
          size=5, angle = 90, hjust = 0, vjust = 0)
它是有效的


但无论如何,我并没有真正理解你的意图。下次请尽量针对您的问题给出一个最小的示例。

如果绘图的x值类型为
日期
,则
几何图形文本
对象的x值也必须是
日期
类型的对象。试一试

geom_text(data=txty, aes(x=as.Date("2015-01-04"), y=toly[1], label=lab),
          size=5, angle = 90, hjust = 0, vjust = 0)
它是有效的


但无论如何,我并没有真正理解你的意图。下次请尽量就你的问题给出一个简单的例子。

我找到了解决问题的方法

我必须定义哪些列是日期、数字和因子,然后在
server
中使用If…else语句,并为每个列创建单独的绘图

 if (input$xaxis == "1st factor column" | input$xaxis == "2nd factor column"){
  g <-ggplot(...) + geom_line() + 
    annotate("text", x=0.5, y=...)
  }
else{
  g <-ggplot(...) + geom_line() + 
    annotate("text", x=min(data_filt[ ,input$xaxis]), y= ...)
  }g
if(输入$xaxis==“第一因子列”|输入$xaxis==“第二因子列”){

我找到了解决我问题的办法

我必须定义哪些列是日期、数字和因子,然后在
server
中使用If…else语句,并为每个列创建单独的绘图

 if (input$xaxis == "1st factor column" | input$xaxis == "2nd factor column"){
  g <-ggplot(...) + geom_line() + 
    annotate("text", x=0.5, y=...)
  }
else{
  g <-ggplot(...) + geom_line() + 
    annotate("text", x=min(data_filt[ ,input$xaxis]), y= ...)
  }g
if(输入$xaxis==“第一因子列”|输入$xaxis==“第二因子列”){

g你好,Patrick,我只想标记水平线,问题是它是反应性的ggplot。用户可以选择x轴和y轴。从我的示例数据中,您可以看到x轴的列可以是:数字和日期列。因此,我无法简单地定义水平线标签在x轴上的位置。因此,我试图找到解决方案无论x轴选择了哪种类型的柱,都可以标记水平线,无论刻度上有什么数字,都可以保持标签在同一位置(如右上角左右)好的,但是对于ggplot来说,
Date
维度的浮点值是没有意义的。也许你可以使用
mean(你的_xu数据)
来获得中间的x位置,而不依赖于
your_xu数据的数据类型。我已经尝试了你的平均值(x_数据)的tipp:
geom_文本(数据=数据过滤,aes(x=平均值(输入$xaxis),y=toly[1] ,label=“OSG”),size=5,hjust=0,vjust=0)
。但是我得到了一个错误:
平均值警告。默认值(输入$xaxis):参数不是数字或逻辑的:返回NA
`selectInput(inputId=“xaxis”,label=“X轴(绘图)”,选项=名称(数据)`->它包含所有列,表示:块(数字)、限制(系数)、日期(日期)、X(数字)…你好,Patrick,我只想标记水平线,问题是它是反应性的ggplot。用户可以选择x轴和y轴。从我的示例数据中,您可以看到x轴的列可以是:数字和日期列。因此,我无法简单地定义水平线标签在x轴上的位置。因此,我尝试查找sol这将允许我标记水平线,无论x轴选择了什么类型的柱,也允许标签保持在相同的位置,无论刻度上有什么数字(如右上角左右)好的,但是对于ggplot来说,
Date
维度的浮点值是没有意义的。也许你可以使用
mean(你的_xu数据)
来获得中间的x位置,而不依赖于
your_xu数据的数据类型。我已经尝试了你的平均值(x_数据)的tipp:
geom_文本(数据=数据过滤,aes(x=平均值(输入$xaxis),y=toly[1] ,label=“OSG”),size=5,hjust=0,vjust=0)
。但是我得到了一个错误:
平均值警告。默认值(输入$xaxis):参数不是数字或逻辑的:返回NA
`selectInput(inputId=“xaxis”,label=“X轴(绘图)”,选项=名称(数据)`->它包含所有列,这意味着:块(数字)、限制(系数)、日期(日期)、X(数字)。。。