R语言 在ggplot直方图上显示所有x轴标签

t98cgbkg  于 2023-05-20  发布在  其他
关注(0)|答案(4)|浏览(388)

我有一个简单的频率直方图的数据与65 k行,这里是我的代码与一个例子数据:

data <- data.frame(var1=floor(6*rnorm(65000)  + 1))
data %>%
  ggplot(aes(x=var1)) +
    geom_histogram(fill="lightblue", color="black", alpha=0.9, bins = 30) +
    theme(plot.title = element_text(size=15),
          axis.text.x = element_text(angle = 90, vjust = 0.5)) +
    stat_bin(geom="text", 
           colour="black",
           bins = 30,
           aes(label=..count..), 
           angle = 45, 
           vjust=-.5)

该图有30个区间,但在X轴上有3个标签:

我只想每个箱子都有标签。
我尝试了theme()和scale_x_cont(),但它们不起作用,并扰乱了整个情节。我不想改变任何东西,我只想在x上添加标签。谢谢大家!

j2datikz

j2datikz1#

绘制直方图的另一种方法,同时允许为每个bin添加轴标签,将geom_barscale_x_binned一起使用:

library(ggplot2)

set.seed(123)

data <- data.frame(var1 = floor(6 * rnorm(200) + 1))

ggplot(data, aes(x = var1)) +
  geom_bar(fill = "lightblue", color = "black", alpha = 0.9) +
  stat_count(
    geom = "text",
    colour = "black",
    aes(label = after_stat(count)),
    angle = 45,
    vjust = 0,
    hjust = 0
  ) +
  scale_x_binned(n.breaks = 30, show.limits = TRUE) +
  theme(
    plot.title = element_text(size = 15),
    axis.text.x = element_text(angle = 90, vjust = .5)
  )

huwehgph

huwehgph2#

一种方法是将scale_x_continuous()breaks一起使用

library(dplyr)
library(ggplot2)

data <- data.frame(var1 = floor(6 * rnorm(200) + 1))

data %>%
  ggplot(aes(x = var1)) +
  geom_histogram(fill = "lightblue", color = "black", alpha = 0.9, bins = 30) +
  theme(plot.title = element_text(size = 15),
        axis.text.x = element_text(angle = 90, vjust = 0.5)) +
  stat_bin(
    geom = "text",
    colour = "black",
    bins = 30,
    aes(label = ..count..),
    angle = 45,
    vjust = -0.5
  ) +
  scale_x_continuous(breaks = seq(min(data$var1), max(data$var1), by = 1))

xlpyo6sf

xlpyo6sf3#

?scale_x_continuous中,breaks参数可以是以下之一
NULL(无中断)
waiver(),表示变换对象计算的默认中断
位置的数值向量
一个函数,它以极限作为输入,并返回中断作为输出(例如,scales::extended_breaks()返回的函数)。也接受rlang lambda函数表示法。
使用最后一个选项,我们可以创建一个简单的函数,给出轴上的每个整数:

data <- data.frame(var1=floor(6*rnorm(200)  + 1))
data %>%
  ggplot(aes(x=var1)) +
    geom_histogram(fill="lightblue", color="black", alpha=0.9, bins = 30) +
    theme(plot.title = element_text(size=15),
          axis.text.x = element_text(angle = 90, vjust = 0.5)) +
    stat_bin(geom="text", 
           colour="black",
           bins = 30,
           aes(label=..count..), 
           angle = 45, 
           vjust=-.5) +
  scale_x_continuous(breaks = function(range) floor(range[1]):ceiling(range[2]))

nsc4cvqm

nsc4cvqm4#

可以使用scale_x_continuous修改x轴比例的外观。可以使用n.breaks更改中断数,也可以使用breakslabels进行调整。documentation提供了很好的细节,这个book是一个很棒的资源,可以更好地理解scales(以及ggplot2作为一个整体)。
对于您的代码,答案如下所示:

data %>%
  ggplot(aes(x=var1)) +
    geom_histogram(fill="lightblue", color="black", alpha=0.9, bins = 30) +
    theme(plot.title = element_text(size=15),
          axis.text.x = element_text(angle = 90, vjust = 0.5)) +
    stat_bin(geom="text", 
           colour="black",
           bins = 30,
           aes(label=..count..), 
           angle = 45, 
           vjust=-.5) +
  scale_x_continuous(breaks = seq(-17, 17, 1))

我还要补充一点,..count..已经被ggplot2 3.4.0弃用。下面是关于弃用和新方法的更多信息。要避免收到警告,请尝试:

data %>%
  ggplot(aes(x=var1)) +
    geom_histogram(fill="lightblue", color="black", alpha=0.9, bins = 30) +
    theme(plot.title = element_text(size=15),
          axis.text.x = element_text(angle = 90, vjust = 0.5)) +
    stat_bin(geom="text", 
           colour="black",
           bins = 30,
           aes(label = after_stat(count)), 
           angle = 45, 
           vjust=-.5) +
  scale_x_continuous(breaks = seq(-17, 17, 1))

相关问题