R Plotly - 条形图条具有随机长度

R Plotly - Bar Chart Bars Have Random Lengths

我遇到了一个奇怪的问题。我用 plotly 创建了一个条形图,但条形图的长度看似随机。在某些情况下,较高的值将具有较高的条形,但在其他情况下,较高的值将具有较低的条形,具体取决于您比较的条形。我不知道这是怎么可能的,更不用说它是怎么发生的了。

这是我的代码:

priceplot2 <- listings4 %>% 
  plot_ly(hovertemplate = "",
          x = ~logavgprice, 
          y = ~neighbourhood,
          span = I(1)
          ) %>% 
  add_bars(color = ~logavgprice,
           hovertemplate = ~paste0(neighbourhood, ", Average Price: $", round(avgprice, 2), "<extra></extra>"))
priceplot2

这是结果的照片:

之前,我将数据按变量(街区)分组,取每个街区的平均价格,然后对数据进行对数转换。

我希望这是有道理的,我很抱歉这不容易重现。

感谢任何人提供的帮助。

谢谢!

P.S。如果有人能告诉我如何重新排序社区,我也会很感激。另外,我似乎无法摆脱那个传说,但这没什么大不了的。

您似乎在显示未聚合的数据,因此条形图堆叠了所有观察结果。看这个例子:

library(plotly)
data.frame(neighborhood = c("A","B","B","C"),
           avgprice = c(10,100,100,1000),
           logavgprice = c(1,2,2,3)) %>%
  plot_ly(x = ~logavgprice,
          y = ~neighborhood) %>%
  add_bars(marker = list(line = list(color = 'rgb(200,200,200)', width = 3)))

请注意,B 中的条形各为 2 长,但总的条形看起来有 4 长(如果我有更多观察,则长为 100 或 1000)。

要解决此问题,您可以调整之前的步骤——也许您应该在计算 avgpricelogavgprice 时使用 summarise 而不是 mutate --或使用 dplyr::distinct(neighborhood, .keep_all = TRUE) 为每个社区仅保留一个观察值。

我们也可以使用 forcats::fct_reorder 使邻域成为一个有序的因素,它将按照我们想要的顺序显示。

这是一个例子:

data.frame(neighborhood = c("A","B","B","C"),
           price = c(1000, 90, 110, 10)) %>%
  group_by(neighborhood) %>%
  summarize(avg_price = mean(price)) %>%
  mutate(logavgprice = log(avg_price)) %>%
  mutate(neighborhood = forcats::fct_reorder(neighborhood, logavgprice)) %>%
  arrange(neighborhood) %>% # optional, just to show reordering before plotting
  plot_ly(x = ~logavgprice,
          y = ~neighborhood) %>%
  add_bars(marker = list(line = list(color = 'rgb(200,200,200)', width = 3)))