我在R
中运行以下RStudio
代码,输出也如下所示:
df2 %>%
ggplot(aes(
x = JANUARY,
y = value,
fill = JANUARY,
group = year
)) +
geom_col(
position = position_dodge(.65),
width = .5
) +
geom_text(aes(
y = value + max(value) * .03,
label = round(value * 100) %>% str_c('%')
),
position = position_dodge(.65)
) +
geom_text(aes(
y = y_pos,
label = str_remove(year, 'X')
),
color = 'white',
angle = 90,
fontface = 'bold',
position = position_dodge(0.65)
) +
scale_y_continuous(
breaks = seq(0, .9, .1),
labels = function(x) round(x * 100) %>% str_c('%')
) +
scale_fill_manual(values = c(
rgb(47, 85, 151, maxColorValue = 255),
rgb(84, 130, 53, maxColorValue = 255),
rgb(244, 177, 131, maxColorValue = 255),
rgb(112, 48, 160, maxColorValue = 255),
rgb(90, 48, 100, maxColorValue = 255)
)) +
theme(
plot.title = element_text(hjust = .5),
panel.background = element_blank(),
panel.grid.major.y = element_line(color = rgb(.9, .9, .9)),
axis.ticks = element_blank(),
legend.position = 'none'
) +
xlab('') +
ylab('') +
ggtitle('Month of JANUARY (as at 01 January)')
输出为:
如您所见,“ D最终”下的值“ 0%”使条形图内的标签消失在x-axis
下方。
我要删除“ 0%”并使标签重新回到条形内的位置。如何修改我的代码以实现此目的?
添加了数据(df2
):
JANUARY year value y_pos
<fct> <chr> <dbl> <dbl>
1 D-150 X2016 0.26 0.12
2 D-90 X2016 0.49 0.21
3 D-60 X2016 0.63 0.265
4 D-30 X2016 0.73 0.325
5 D-Final X2016 0.81 0
6 D-150 X2017 0.28 0.12
7 D-90 X2017 0.5 0.21
8 D-60 X2017 0.64 0.265
9 D-30 X2017 0.77 0.325
10 D-Final X2017 0.82 0
11 D-150 X2018 0.33 0.12
12 D-90 X2018 0.51 0.21
13 D-60 X2018 0.62 0.265
14 D-30 X2018 0.77 0.325
15 D-Final X2018 0.78 0
16 D-150 X2019 0.24 0.12
17 D-90 X2019 0.42 0.21
18 D-60 X2019 0.53 0.265
19 D-30 X2019 0.65 0.325
20 D-Final X2019 0 0
答案 0 :(得分:1)
在第一行中,您可以使用df2 %>% filter(value!=0)
过滤df2以获取所有非零值
答案 1 :(得分:1)
至少在这一点上,实际上不是0%。标签的位置是预定义的,并由y_pos
给出,因此您可以自己简单地用例如
df2$y_pos[df2$JANUARY == "D-Final"] <- 0.4
要删除0%,第一行可以替换为
df2 %>% filter(value > 0.01) %>%
这给
显然y_pos
是用
df2 %>% group_by(JANUARY) %>% mutate(y_pos = min(value) / 2)
因此,为避免出现此问题,在这种情况下(由于按组划分的所有其他值都相似),您可以改为使用
df2 %>% group_by(JANUARY) %>% mutate(y_pos = max(value) / 2)