# library
library(ggplot2)
library(dplyr)

# Start with the diamonds dataset, natively available in R:
p <- diamonds %>%
  # Add a new column called 'bin': cut the initial 'carat' in bins
  mutate(bin=cut_width(carat, width = 0.5, boundary=0) ) %>%
  # plot
  ggplot(aes(x=bin, y= x) ) +
  geom_boxplot() +
  xlab("Carat") + geom_abline(slope = 1, intercept = 0)
p

我试着用geom_abline加一条45度的对角线.这会产生一条黑线.然而,这与x轴上的bin不完全匹配.例如,当为bin = (2.5,3]时,黑线的y坐标为6.

我粗略地(用蓝色)画了45度的对角线.例如,对于bin = (2.5, 3],y坐标应为2.75(箱子的中点).对于bin = (3, 3.5],y坐标应为3.25(料仓的中点).有没有办法在ggplot中生成这条线?

enter image description here

推荐答案

对于ggplot,轴上的任何类别的距离都为1.因此,坡度为1的geom_abline将 for each 类别增加y轴1.由于垃圾箱的大小为1/2,因此使用0.5的坡度将正确绘制坡度.

我们还需要将截距调整到-0.25.这是因为第一个箱子位于x坐标1,而不是0.25.

p <- diamonds %>%
    # Add a new column called 'bin': cut the initial 'carat' in bins
    mutate(bin=cut_width(carat, width = 0.5, boundary=0) ) %>%
    # plot
    ggplot(aes(x = bin, y = x)) +
    geom_boxplot() +
    xlab("Carat") + 
    geom_abline(slope = 0.5, intercept = -0.25) + 
    geom_hline(yintercept = c(2.75, 3.25))

请注意,我还画了两条水平线,以确认这符合手动计算出的示例值.

enter image description here

R相关问答推荐

使用对管道内单元格的引用生成新变量

基于现有类创建类的打印方法(即,打印tibles更长时间)

无法将传奇添加到cowplot多情节中

r替换lme S4对象的字符串的一部分

我不能在docker中加载sf

将文件保存到新文件夹时,切换r设置以不必创建目录

R函数,用于生成伪随机二进制序列,其中同一数字在一行中不出现超过两次

找出二叉树中每个 node 在R中的深度?

在R中,我如何使用滑动窗口计算位置,然后进行过滤?

如何创建累加到现有列累计和的新列?

如何在反曲线图中更改X标签

将列表中的字符串粘贴到R中for循环内的dplyr筛选器中

减少雨云面之间的间距并绘制所有统计数据点

长/纬点继续在堪萨斯-SF结束,整齐的人口普查

如何更改包中函数中的参数?

使用同一行中的前一个值填充R矩阵中的缺失值

在R中使用ggraph包排列和着色圆

识别部分重复行,其中一行为NA,其重复行为非NA

从多行中 Select 最小值

向内存不足的数据帧添加唯一行