使用基于密度的渐变在R中创建条形图

使用基于密度的渐变在R中创建条形图,r,ggplot2,gradient,boxplot,violin-plot,R,Ggplot2,Gradient,Boxplot,Violin Plot,我想表示一些变量的密度,就像你们在箱线图、小提琴图或蜂群图中一样。但在这种情况下,每个变量都是一个带,密度显示为沿条的梯度 希望我不需要手动绘制填充形状的条形图 想象一下,如果不是小提琴或箱线图,而是一个带有梯度的条,表示密度 这是我从你的问题中得到的最接近的结果: # Dummy data df <- data.frame( y = c(rnorm(100, 4), rnorm(100, 12)), x = rep(c(1, 2), each = 100) ) ggplot(

我想表示一些变量的密度,就像你们在箱线图、小提琴图或蜂群图中一样。但在这种情况下,每个变量都是一个带,密度显示为沿条的梯度

希望我不需要手动绘制填充形状的条形图

想象一下,如果不是小提琴或箱线图,而是一个带有梯度的条,表示密度


这是我从你的问题中得到的最接近的结果:

# Dummy data
df <- data.frame(
  y = c(rnorm(100, 4), rnorm(100, 12)),
  x = rep(c(1, 2), each = 100)
)

ggplot(df, aes(x, y, group = x)) +
  # To fill gap between 0 and actual data
  stat_summary(geom = "rect",
               fun.ymin = function(x){0},
               fun.ymax = min,
               aes(xmin = x - 0.4, xmax = x + 0.4, fill = 0)) +
  # To make the density part
  stat_ydensity(aes(fill = stat(density), 
                    xmin = x - 0.4, xmax = x + 0.4,
                    # Nudge y by a bit depending on the spread of your data
                    ymin = stat(y) - 0.01, ymax = stat(y) + 0.01), 
                geom = "rect", trim = FALSE)
#虚拟数据

df这是我从你的问题中得到的最接近的结果:

# Dummy data
df <- data.frame(
  y = c(rnorm(100, 4), rnorm(100, 12)),
  x = rep(c(1, 2), each = 100)
)

ggplot(df, aes(x, y, group = x)) +
  # To fill gap between 0 and actual data
  stat_summary(geom = "rect",
               fun.ymin = function(x){0},
               fun.ymax = min,
               aes(xmin = x - 0.4, xmax = x + 0.4, fill = 0)) +
  # To make the density part
  stat_ydensity(aes(fill = stat(density), 
                    xmin = x - 0.4, xmax = x + 0.4,
                    # Nudge y by a bit depending on the spread of your data
                    ymin = stat(y) - 0.01, ymax = stat(y) + 0.01), 
                geom = "rect", trim = FALSE)
#虚拟数据

df能否请你详细说明一下,可能是你正在使用的数据。添加了MRE示例。能否请你详细说明一下,可能是你正在使用的数据。添加了MRE示例。我认为这样就可以了。我个人会以不同的方式设置数据和
aes
——更像我添加的示例。但是我很确定我可以用同样的方式使用
统计属性。顺便说一句,+/-0.4和+/-0.1代表什么?因为
geom\u rect
被参数化为xmin、xmax、ymin和ymax,并且我们的(计算)数据给出了x/y参数化(居中)数据,所以我们需要使用xmin/xmax将条带的宽度增加到一个合理的数字,并使用ymin/ymax将每个条带的高度增加到一个合理的数字
geom_tile
可以处理简单的x/y参数化数据,但当我尝试这样做时,它并没有完全填充其中一个条中的间隙,因为它尝试为每个tile创建规则的高度,这与计算的y值不匹配。我想这样就可以了。我个人会以不同的方式设置数据和
aes
——更像我添加的示例。但是我很确定我可以用同样的方式使用
统计属性。顺便说一句,+/-0.4和+/-0.1代表什么?因为
geom\u rect
被参数化为xmin、xmax、ymin和ymax,并且我们的(计算)数据给出了x/y参数化(居中)数据,所以我们需要使用xmin/xmax将条带的宽度增加到一个合理的数字,并使用ymin/ymax将每个条带的高度增加到一个合理的数字
geom_tile
可以处理简单的x/y参数化数据,但当我尝试这样做时,它并没有完全填充其中一个条中的间隙,因为它尝试为每个tile创建规则的高度,这与计算的y值不匹配。