ggplot2 R中堆叠的条形的移动位置更靠近y轴

问题描述 投票:1回答:1

我正在寻求一些我编写的用于生成堆叠条形图的R代码的帮助。这是使用ggplot2软件包。这是我的代码:

Plot1 = ggplot(data = data1, aes(x= Main_Cat, y= Percentage,  fill= Sub_Cat)) + # don't change these
  geom_bar(position = position_stack(), stat="identity", width = 1) + # don't change these
  ggtitle("title") +  # title text 
  theme(plot.title = element_text(hjust = 0.5, size=14, face = "bold")) +
  xlab("All Categories") + # x axis text
  ylab("Percentage (%)") + # y axis text
  geom_text(aes(label = Percentage), position = position_stack(vjust = 0.5), size = 4.6) + # number labels on graph
  theme(panel.background = element_blank()) + # background colour
  theme(axis.line = element_line(colour = "black")) + # axis colour
  scale_y_continuous(expand = c(0,0)) + scale_x_discrete(expand = c(1,1)) + # change position of axis
  theme(axis.text=element_text(size=12, face = "bold", colour = "black"), 
        axis.title=element_text(size=14,face="bold", colour = "black")) + # axis settings
  scale_fill_manual(values = c("#FFFF00", "#98FB98", "#00BFFF", "#0000FF")) + #change colours
  theme(axis.line.x = element_line("white")) 


print(Plot1)

Plot image

我想将条形图移至更靠近y轴,或将y轴移至更靠近条形,而无需更改条形本身的宽度。

有什么建议吗?

r ggplot2 stacked-chart
1个回答
1
投票

这里有一些要考虑的事情,您可以用来基本了解绘图的外观。即,我将使用以下内容来调整y轴相对于条形的位置:

  1. 知道已保存图像的输出与图形设备的分辨率和纵横比有关。换句话说,如果您调整图形窗口的大小,则会得到不同的图。这也会溢出到ggsave()中(或者您正在保存图像)。您可以通过在height=功能中正确调整width=ggsave()来控制输出。

  2. width=geom_bar。您已在代码中将其设置为width=1,但可以使用它来压缩或扩展栏。如果只有一个小节,可以随意跳过1,但是如果有多个小节,则width=1.5会溢出到下一个轴值...不确定这是否对您有问题,但是如果不,这可能是拉近门槛的一种怪癖方法。

  3. 接近标准的最佳方法是使用expand=scale_x_discrete()参数。您已经使用过...一种。请查阅该功能的文档,其中提到您应该使用expansion()功能设置expand=。它可以通过设置expand=c(0,0)来删除绘图周围的所有展开-这就是y轴没有展开的原因-但是如果您仅将向量传递给expand=参数,同样的情况也不成立。您应该将其设置为expand=expansion(),然后在expansion()内需要传递mult=add=

您可以调整所需的方式,但这是我用来在下面的绘图中创建两个示例的代码。

将轴设置在条形旁边

# use the entire code you already posted, except change only the line below:
scale_x_discrete(expand = expansion(add=c(0,0)))
print(Plot1)

# remember, important to set the width/height
ggsave('example_1.png', width=2.5,height=5)

(对不起,此页面上的图像很大,但是您可以调整大小...)

enter image description here

在轴和杆之间增加一点空间(但要增加一点)

# same as before, but your line now reads something like
scale_x_discrete(expand = expansion(add=c(0.6,0.5)))
print(Plot1)

ggsave('example_1.png', width=2.5,height=5)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.