在geom_bar中按类别定义不同的标签大小

6 r ggplot2 geom-bar

我正在尝试绘制堆积条形图,geom_bar并使用条形图中的每个类别标记每个类别.由于某些类别的值较小,因此条形图的相应段的高度有时很小.所以,我正在尝试使用调整标签的大小geom_text.
我试图定义一个名为的矢量,size它根据我试图绘制的变量的值而变化,但是,虽然标签的大小确实因类别而异,但它似乎与值无关.此外,我不知道为什么我在图表的右侧获得了我的标签尺寸的图例.
这是我正在使用的代码的剥离版本:

library(ggplot2)
library(plyr)
library(scales)

Var1 = as.factor(rep(c("A", "B", "C", "D", "E", "F"),2))
Var2 = as.factor(rep(c("Y1","Y2"),each=6))
Freq = c(0.4, 0.1, 0.3, 0.1, 0.05, 0.05,0.2,0.2,0.3,0.2,0.05,0.05)
Data = data.frame(Var1, Var2, Freq)
Data <- ddply(Data, .(Var2), mutate, y = cumsum(Freq)-Freq/2)

size = ifelse(Data$Freq > 0.05, 10, 3)
label = paste(round(Data$Freq*100,0),"%", sep = "")
p = ggplot(data = Data, aes(x = factor(''), y = Freq, fill = Var1)) +
  geom_bar(stat = "identity",position = "fill", width = 1) +
  scale_fill_brewer(palette = 3) +
  facet_grid(facets = . ~ Var2) +
  geom_text(aes(y = y, label = label, 
                position ="identity", face = "bold"), size = size, hjust=0.5, vjust=0.5) +
  xlab('') + ylab('') + labs(fill = '') + ggtitle('Example') +
  theme(axis.text.y = element_text(size=14,face="bold"),
        panel.background = element_blank(),
        plot.title = element_text(size = 20, colour = "black", face = "bold"))
p
Run Code Online (Sandbox Code Playgroud)

据我所知,问题是由facet引起的,因为这个稍微简化的版本(即没有facets)工作正常:

library(ggplot2)
library(plyr)
library(scales)

Var1 = as.factor(c("A", "B", "C", "D", "E", "F"))
Freq = c(0.4, 0.1, 0.3, 0.1, 0.05, 0.05)
y = cumsum(Freq)-Freq/2
Data = data.frame(Var1, Freq, y)

size = ifelse(Data$Freq > 0.05, 10, 3)
label = paste(round(Data$Freq*100,0),"%", sep = "")
p = ggplot(data = Data, aes(x = factor(''), y = Freq, fill = Var1)) +
  geom_bar(stat = "identity",position = "fill", width = 1) +
  scale_fill_brewer(palette = 3) +
  geom_text(aes(y = y, label = label, 
                position ="identity", face = "bold"), size = size, hjust=0.5, vjust=0.5) +
  xlab('') + ylab('') + labs(fill = '') + ggtitle('Example') +
  theme(axis.text.y = element_text(size=14,face="bold"),
        panel.background = element_blank(),
        plot.title = element_text(size = 20, colour = "black", face = "bold"))
p
Run Code Online (Sandbox Code Playgroud)

use*_*1_G 2

通过size在数据框中添加 a 并将这些参数移动到geom_text aes()` 中,这对我来说似乎没问题。我认为..

Data$size <- size

p <- ggplot(data = Data, aes(x = factor(''), y = Freq, fill = Var1)) +
       geom_bar(stat = "identity",position = "fill", width = 1) +
       scale_fill_brewer(palette = 3) +
       geom_text(aes(y = y, label = label, 
                     position ="identity", face = "bold", size = size), hjust=0.5, 
                     vjust=0.5) +
       xlab('') + ylab('') + labs(fill = '') + ggtitle('Example') +
       theme(axis.text.y = element_text(size=14,face="bold"),
             panel.background = element_blank(),
             plot.title = element_text(size = 20, colour = "black", face = "bold")) + 
             facet_grid(facets = . ~ Var2) + 
             guides(size=FALSE)
Run Code Online (Sandbox Code Playgroud)

另外,如果您+ guides(size=FALSE)像我一样添加到末尾,这将删除您的尺寸图例。

我对此的解释可能是错误的,一旦您进行分面,您仍然提供完整的长度size,并且不允许分面根据 切割大小数据Var2

我认为你的尺寸问题是size你只有两种尺寸,差异很大(可能必须有一些相对缩放),也许添加+ scale_size(range=c(6,10))并使用它以获得更合适的东西?尺寸6,10范围对我来说看起来好多了。

在此输入图像描述