带有x轴偏移量的时间戳条

时间:2019-03-26 16:58:03

标签: r timestamp plotly

我想用一些条形图来绘制一些时间戳,其中1条形图表示一个小时。

我的问题是刻度线居中居中,我想将其移动到条形图的左端

当不放大图时,这不是问题,但是当放大时,会出现更多的刻度标签,这是错误的。

编辑:我需要选项barmode = 'overlay',因为我还有其他要绘制的迹线,此示例中未包括这些迹线。

下面的图片说明了我当前和预期的布局,这是绘制该图的一些数据。 (我尝试过但没有成功的某些选项也包含在xaxis配置中,但未注释)。

library(plotly)
library(lubridate)


df <- data.frame(
  ts = seq(as.POSIXct("2019-03-20 00:00:00"), by = "hour", length.out = 24),
  val = sample(1:100, 24)
)

plot_ly() %>% 
  add_bars(data = df, x = ~ts, y = ~val) %>% 
  layout(dragmode = "select", autosize = TRUE, selectdirection = "h",
                 barmode = 'overlay',
                 bargap = 0.05,
                 xaxis = list(ticks = "outside",
                              type = "date",
                              # tickson="boundaries",
                              # offset=1800,
                              tickmode = "auto",
                              title = ""
                              )) %>% 
  config(scrollZoom = TRUE)

enter image description here

3 个答案:

答案 0 :(得分:1)

默认情况下,条居中,我没有找到如何更改此设置。 一种选择是添加第二条,因为当每个x轴单位有2条时,一个轴位于刻度线的左侧,第二个轴位于右侧(尝试使用一个轴获取的值)

为什么不创建第二个不可见条? :)

df <- data.frame(
  ts    = seq(as.POSIXct("2019-03-20 00:00:00"), by = "hour", length.out = 24),
  val   = sample(1:100, 24),
  val0  = 0 
)

plot_ly(df, type = 'bar') %>%
  add_trace(x = ~ts, y = ~val0) %>% 
  add_trace(x = ~ts, y = ~val) %>%
  layout(
    showlegend = FALSE
  ) %>% 
  config(scrollZoom = TRUE)

这将创建一个图例(因为有2种类型的条,分别是val和val0),所以我将其删除。

enter image description here

答案 1 :(得分:1)

以下满足您的需求吗?

我有时在new Vue({ el: "#app", data() { return { input: null } }, methods: { handleInput(e) { this.input = e.target.value ? e.target.value.toString().toUpperCase() : e.target.value; } } });中要利用的一件事是,您可以在<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <input type="text" v-model="input" @input="handleInput"> {{ input }} <!-- {{ input }} is just for reference --> </div>中显示不同的值,这些值与plotlytext的值无关用于绘制数据。

在这种情况下,我们可以创建一个具有偏移时间值x的列,并在每行时间的半小时之后绘制x值-如果您每小时都有一列,则这有效左对齐条形。

y

Plot output

答案 2 :(得分:0)

确定要结束设计工作吗?减去30分钟即可放大。

我不建议您实际编辑数据,即使这是我在代码中所做的。在调用中添加一个小功能吧可以解决吗?如果叠加其他数据,可能会造成混乱,但我只是想提出建议。

library(plotly)
library(lubridate)

df2 <- data.frame(
  ts = seq(as.POSIXct("2019-03-20 00:00:00"), by = "hour", length.out = 24) - minutes(30),
  val = sample(1:100, 24)
)


plot_ly() %>% 
  add_bars(data = df2, x = ~ts, y = ~val) %>% 
  layout(dragmode = "select", autosize = TRUE, selectdirection = "h",
         barmode = 'overlay',
         bargap = 0.05,
         xaxis = list(ticks = "outside",
                      type = "date",
                      # tickson="boundaries",
                      # offset=1800,
                      tickmode = "auto",
                      title = ""
         )) %>% 
  config(scrollZoom = TRUE)