简体   繁体   中英

How do I add data labels to a ggplot histogram with a log(x) axis?

I am wondering how to add data labels to a ggplot showing the true value of the data points when the x-axis is in log scale. I have this data:

date <- c("4/3/2021", "4/7/2021","4/10/2021","4/12/2021","4/13/2021","4/13/2021")
amount <- c(105.00, 96.32, 89.00, 80.84, 121.82, 159.38)
address <- c("A","B","C","D","E","F")

df <- data.frame(date, amount, address)

And I plot it in ggplot2:

plot <- ggplot(df, aes(x = log(amount))) +
      geom_histogram(binwidth = 1)
    
plot + theme_minimal() + geom_text(label = amount)

... but I get the error

"Error: geom_text requires the following missing aesthetics: y"

I have 2 questions as a result:

  1. Why am I getting this error with geom_histogram? Shouldn't it assume to use count as the y value?
  2. Will this successfully show the true values of the data points from the 'amount' column despite the plot's log scale x-axis?

Perhaps like this?

ggplot(df, aes(x = log(amount), y = ..count.., label = ..count..)) +
  geom_histogram(binwidth = 1) + 
  stat_bin(geom = "text", binwidth = 1, vjust = -0.5) +
  theme_minimal() 

ggplot2 layers do not (at least in any situations I can think of) take the summary calculations of other layers, so I think the simplest thing would be to replicate the calculation using stat_bin(geom = "text"...

在此处输入图像描述

Or perhaps simpler, you could pre-calculate the numbers:

library(dplyr)
df %>%
  count(log_amt = round(log(amount))) %>%
  ggplot(aes(log_amt, n, label = n)) +
  geom_col(width = 1) + 
  geom_text(vjust = -0.5)

EDIT -- to show buckets without the log transform we could use:

df %>%
  count(log_amt = round(log(amount))) %>%
  ggplot(aes(log_amt, n, label = n)) +
  geom_col(width = 0.5) + 
  geom_text(vjust = -0.5) +
  scale_x_continuous(labels = ~scales::comma(10^.), 
                     minor_breaks = NULL)

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM