R 在ggplot2中显示自定义轴标签
我想在同一个图上绘制直方图和密度。我想添加到以下内容中的是自定义y轴标签,类似于R 在ggplot2中显示自定义轴标签,r,ggplot2,R,Ggplot2,我想在同一个图上绘制直方图和密度。我想添加到以下内容中的是自定义y轴标签,类似于sprintf([%s]%s“,…密度…,…计数…)-一个刻度值有两个数字。是否有可能通过缩放y__连续获得此结果,或者我是否需要以某种方式解决此问题 使用scales::trans_new和秒轴显示当前进度秒轴可以接受,但最理想的输出如下图所示 set.seed(1) var <- rnorm(4000) binwidth <- 2 * IQR(var) / length(var) ^ (1 / 3)
sprintf([%s]%s“,…密度…,…计数…)
-一个刻度值有两个数字。是否有可能通过缩放y__连续
获得此结果,或者我是否需要以某种方式解决此问题
使用scales::trans_new
和秒轴
显示当前进度<代码>秒轴可以接受,但最理想的输出如下图所示
set.seed(1)
var <- rnorm(4000)
binwidth <- 2 * IQR(var) / length(var) ^ (1 / 3)
count_and_proportion_label <- function(x) {
sprintf("%s [%.2f%%]", x, x/sum(x) * 100)
}
ggplot(data = data.frame(var = var), aes(x = var, y = ..count..)) +
geom_histogram(binwidth = binwidth) +
geom_density(aes(y = ..count.. * binwidth)) +
scale_y_continuous(
# this way
trans = trans_new(name = "count_and_proportion",
format = count_and_proportion_label,
transform = function(x) x,
inverse = function(x) x),
# or this way
sec.axis = sec_axis(trans = ~./sum(.),
labels = percent,
name = "proportion (in %)")
)
最后,我想得到这样的东西:
将百分比添加为次轴是否可以接受?例如
your_plot + scale_y_continuous(sec.axis = sec_axis(~.*2, name = "[%]"))
也许可以将次轴覆盖在主轴上,但我不确定您将如何进行此操作
您可以通过创建一组自定义标签并将其添加到绘图中来实现所需的输出:
library(tidyverse)
library(ggplot2)
set.seed(1)
var <- rnorm(400)
bins <- .1
df <- data.frame(yvals = seq(0, 20, 5), labels = c("[0%]", "[10%]", "[20%]", "[30%]", "[40%]"))
df <- df %>% tidyr::unite("custom_labels", labels, yvals, sep = " ", remove = TRUE)
ggplot(data = data.frame(var = var), aes(x = var, y = ..count..)) +
geom_histogram(aes(y = ..count..), binwidth = bins) +
geom_density(aes(y = ..count.. * bins), color = "black", alpha = 0.7) +
ylab("[density] count") +
scale_y_continuous(breaks = seq(0, 20, 5), labels = df$custom_labels)
库(tidyverse)
图书馆(GG2)
种子(1)
上述var并没有解决这个问题,第二个量表仍然缺乏关于密度的信息。它仍然是一个。计数..
。对不起,你说得对-你必须更改比例因子才能从计数转换为密度。相关更改将是。。。sec_轴(~.*SCALE,…
。是的,这仍然是一个可接受的解决方案。我尝试使用trans\u new
来实现这一点,但格式化程序在最后应用,它只得到最后的中断。我以前不能假设y中断和y值。我以前尝试过使用graphics::hist
,但我无法再现与ggplot2
library(tidyverse)
library(ggplot2)
set.seed(1)
var <- rnorm(400)
bins <- .1
df <- data.frame(yvals = seq(0, 20, 5), labels = c("[0%]", "[10%]", "[20%]", "[30%]", "[40%]"))
df <- df %>% tidyr::unite("custom_labels", labels, yvals, sep = " ", remove = TRUE)
ggplot(data = data.frame(var = var), aes(x = var, y = ..count..)) +
geom_histogram(aes(y = ..count..), binwidth = bins) +
geom_density(aes(y = ..count.. * bins), color = "black", alpha = 0.7) +
ylab("[density] count") +
scale_y_continuous(breaks = seq(0, 20, 5), labels = df$custom_labels)