gpt4 book ai didi

r - Echarts4r 的条形图从 0 以外的值开始

转载 作者:行者123 更新时间:2023-12-05 01:04:02 24 4
gpt4 key购买 nike

我想使用 echarts4r 绘制一个条形图,其中截止值上方的值显示为绿色和红色下方,并且条形图从该值开始。如果截止值为 0,我们可以使用提供的答案 here , 对于其他值(例如,下例中的 1),此方法效果不佳,因为条形图始终从零开始。有没有办法让条形图从其他值开始?

请参阅下面的 MWE:

library(echarts4r)
set.seed(1)
df <- data.frame(
x = 1:10,
y = 1 + cumsum(rnorm(10, 0, 0.1))
)
df %>%
e_charts(x) %>%
e_bar(y) %>%
e_visual_map(
type = "piecewise",
pieces = list(
list(
gt = 1,
color = "green"
),
list(
lte = 1,
color = "red"
)
)
)

enter image description here

使用 ggplot2 我会这样做

library(ggplot2)
CUTOFF <- 1
df$color <- ifelse(df$y > CUTOFF, "green", "red")
ggplot(df, aes(xmin = x - 0.5, xmax = x + 0.5,
ymin = CUTOFF, ymax = y, fill = I(color))) +
geom_rect()

enter image description here

最佳答案

实现您想要的结果的一个选项是使用带有一些辅助列的堆叠条形图。基本上,我使用一个透明的底栏,在其顶部添加两个反射(reflect)截止值下方和上方的值。

注意:我必须将 x 列转换为因子,否则我的 x 轴范围可达 20。

library(echarts4r)
library(dplyr)

set.seed(1)

df <- data.frame(
x = 1:10,
y = 1 + cumsum(rnorm(10, 0, 0.1))
)

df |>
mutate(x = factor(x),
bottom = ifelse(y < 1, y, 1),
lt = ifelse(y < 1, 1 - y, 0),
gte = ifelse(y < 1, 0, y - 1)) |>
e_charts(x) |>
e_bar(bottom, stack = "x", itemStyle = list(color = "transparent", barBorderColor = "transparent"), legend = FALSE) |>
e_bar(lt, stack = "x") |>
e_bar(gte, stack = "x") |>
e_color(c("red", "green"))

enter image description here

关于r - Echarts4r 的条形图从 0 以外的值开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72911432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com