我正在尝试使用ggplot2绘制瀑布图。当我放置数据标签时,它没有放在正确的位置。
以下是我正在使用的代码
final Map<String, Map<String, Set<String>>> exchanges = gson.fromJson(jsonReader, exchangesType);
System.out.println(exchanges);
以下是输出。我希望数据标签位于栏的开头或末尾。 我不是R的专家。只是想学习。任何帮助都会非常感激。
我正在关注以下博客
https://learnr.wordpress.com/2010/05/10/ggplot2-waterfall-charts/
但不知何故,当我在geom_text中编写相同的代码时,它会给我一个错误。可能是语法相关的问题。
答案 0 :(得分:3)
这是ggplot的一种方法。
首先是数据:
df1 <- data.frame(z = c(-417, -12, 276, -276, 787, 14),
b = LETTERS[1:6])
library(tidyverse)
为cumsum
坐标计算lag
和cumsum
的{{1}}
geom_rect
这是一种更简单的方法,但我认为标签位置目前无法更改,但计划如下:
rect_text_labels_anchor(character)rect_text_labels应该如何 定位?在将来的版本中,我们可能会支持北方或 南锚,或定向定位(负向下,正向 现在,只支持中心。
df1 %>%
mutate(val = cumsum(z),
lag = c(0, lag(val)[-1]),
b1 = as.numeric(b)) -> df1
ggplot(df1)+
geom_rect(aes(xmin = b1 - 0.45,
xmax = b1 + 0.45, ymin = lag, ymax = val)) +
geom_text(aes(x = b1, y = val, label = val), #or `label = z`
vjust = ifelse(df1$val < df1$lag, -0.2, 1)) + #geom_text vjust depends on the direction of the value
scale_x_continuous(breaks = 1:6, labels = df1$b)
您也可以在ggplot中以相同的方式对其进行着色:
library(waterfalls)
df1 <- data.frame(z = c(-417, -12, 276, -276, 787, 14),
b = LETTERS[1:6])
编辑:回答评论中的问题。
填充瀑布:
df1 %>%
mutate(val = cumsum(z),
lag = c(0, lag(val)[-1]),
b1 = as.numeric(b),
color = ifelse(val <lag, "down", "up")) -> df1
ggplot(df1)+
geom_rect(aes(xmin = b1 - 0.45,
xmax = b1 + 0.45, ymin = lag, ymax = val, fill = color)) +
geom_text(aes(x = b1, y = val, label = z),
vjust = ifelse(df1$val < df1$lag, -0.2, 1)) +
scale_x_continuous(breaks = 1:6, labels = df1$b)
要回答你的geom_text代码出了什么问题,我需要看一下。除了你的代码工作,但它过于复杂的事情。我建议你学习一些tidyverse函数,数据操作会更加清晰。
还有一点需要注意,添加反向标记:
df1 <- data.frame(z = c(-417, -12, 276, -276, 787, 14),
b = LETTERS[1:6],
group = rep(c("AB", "CD", "EF"), each = 2))
df1 %>%
mutate(val = cumsum(z),
lag = c(0, lag(val)[-1]),
b1 = as.numeric(b),
g1 = as.numeric(group)) -> df1
ggplot(df1)+
geom_rect(aes(xmin = g1 - 0.45,
xmax = g1 + 0.45, ymin = lag, ymax = val, fill = b)) +
geom_text(aes(x = g1, y = val, label = z),
vjust = ifelse(df1$val < df1$lag, -0.2, 1)) +
scale_x_continuous(breaks = 1:3, labels = unique(df1$group))
当列名不包含特殊字符时,不是必需的:
dataset$`TotalHeadcount`
EDIT2:要在x轴上更改顺序,首先要更改分组因子的级别,然后进行计算和绘图:
dataset$TotalHeadcount