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)。
要解决此问题,您可以调整之前的步骤——也许您应该在计算 avgprice
和 logavgprice
时使用 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)))
我遇到了一个奇怪的问题。我用 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)。
要解决此问题,您可以调整之前的步骤——也许您应该在计算 avgprice
和 logavgprice
时使用 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)))