R 如何在条形图中更改ggplot2 x轴值?

R 如何在条形图中更改ggplot2 x轴值?,r,ggplot2,R,Ggplot2,我想在R中做一个条形图,图中的最后一个条形表示last是频率大于某个阈值的所有值的总和。我想在对应于最后一条的x值上表示此信息。例如: library(ggplot2) x <- c(1, 2, 3, 4, 5) y <- c(4000, 3000, 2000, 1000, 500) df <- data.frame(x, y) names(df) <- c("Var1", "Freq") theme_set(theme_classic()) g <- g

我想在R中做一个条形图,图中的最后一个条形表示last是频率大于某个阈值的所有值的总和。我想在对应于最后一条的x值上表示此信息。例如:

library(ggplot2)

x <- c(1, 2, 3, 4, 5)
y <- c(4000, 3000, 2000, 1000, 500)

df <- data.frame(x, y)

names(df) <- c("Var1", "Freq")

theme_set(theme_classic())

g <- ggplot(df, aes(Var1, Freq))
g + geom_bar(stat = "identity", width = 0.5, fill = 'tomato2') + 
  xlab('Var1') +
  ylab('Freq') +
  theme(axis.text.x = element_text(angle = 0, 
                                   vjust = 0.6, 
                                   colour = "black"),
        axis.text.y = element_text(colour = "black"))
此代码按照我的意愿格式化x轴,但它会覆盖条形图,留下一个空图表:


如何执行此操作?

缩放x\u连续
中更改标签:

... + scale_x_continuous(labels=c("0", "1", "2", "3", "4", "\u2265 5"))

一种方法是避免直接更改轴刻度标签,但将
Var1
中的分类数据转换为一个因子,然后使用
forcats::fct_lump
重新调整该因子,使最终因子为
≥5

# Insert after df generated, before plot call
library(forcats)
df <- df %>% 
  mutate(Var1 = as_factor(Var1),
         Var1 = fct_lump_min(Var1, min = 501, w = Freq, other_level = "≥5"))
#在生成df之后、绘图调用之前插入
图书馆(供猫用)
df%
突变(Var1=as_因子(Var1),
Var1=fct\U总成\U最小值(Var1,最小值=501,w=频率,其他\U级别=”≥5"))

问题在于,正如@Z.Lin评论所指出的,在使用
缩放x_离散之前,我将
几何图形条(…)
分配给ggplot对象。以下是解决方案:


library(ggplot2)
  ...
  labels <- sapply(seq(n), .foo, n)

  g <- ggplot(df, aes(Var1, Freq)) + 
         scale_x_discrete(breaks = sapply(seq(n), function(x) toString(x)),
                          labels = labels)

  g + geom_bar(stat = "identity", width = 0.5, fill = color) + 
  ...

图书馆(GG2)
...

标签这可能会有所帮助:当我更改为
scale\u x\u continuous
时,我得到了以下错误:
Erro:Discrete value提供给continuous scale\u x\u Discrete
使用
scale\u x\u Discrete(标签=c(“0”、“1”、“2”、“3”、“4”、“4”、“\u2265”))
也不起作用。@marcelo上面的
scale\u\u\u continuous
答案应该起作用,除非实际的
df$Var1
不是整数/数字。您确定已将完整的ggplot对象(即
g+geom_bar(…)
)分配回
g
?您没有在问题中包含的代码中这样做,&在这种情况下获得一个空白绘图是完全合理的。@marcelo这假设列
Var1
是数字/整数,正如您问题中的代码中所述(我使用了
ggplot2
3.1.0)。@Z.Lin我分配了
geom_条(…)
先绘制对象,然后使用
缩放x_离散
,更改分配顺序修复了我的问题,即首先分配
缩放x_离散
,然后分配
几何图形条(…)
。对不起,我的错。谢谢大家!!

library(ggplot2)
  ...
  labels <- sapply(seq(n), .foo, n)

  g <- ggplot(df, aes(Var1, Freq)) + 
         scale_x_discrete(breaks = sapply(seq(n), function(x) toString(x)),
                          labels = labels)

  g + geom_bar(stat = "identity", width = 0.5, fill = color) + 
  ...