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

问题描述 投票:0回答:3

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

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 个 bin,但在 x 轴上有 3 个标签:

我只希望它为每个垃圾箱贴上标签。

我尝试了 theme() 和 scale_x_cont() 但它们没有用并且弄乱了整个情节。我不想更改任何内容,只想在 x 上添加标签。谢谢!

r ggplot2 dplyr tidyverse histogram
3个回答
0
投票

一种方法可以使用

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))


0
投票

您可以使用

scale_x_continuous
修改 x 轴刻度的外观。您可以使用
n.breaks
更改休息次数,或使用
breaks
labels
进行调整。 documentation 提供了非常详细的信息,这本 book 是一个很棒的资源,可以更好地理解尺度(以及
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(n.breaks = 50)

我还要补充一点,

..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(n.breaks = 50)

0
投票

?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]))

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