繁体   English   中英

ggplot2使用位置躲避2时堆叠的带类别和数值的条形图

[英]ggplot2 stacked bars with categorial and numerical values while using position dodge2

我有一个数据框,其中包含要绘制的某些因子和数值。

我拥有的数据看起来完全像这样(无法重现示例):

    library(ggplot2)

df=structure(list(StartPos = c(6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
       6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
       8, 8, 8, 8), Direction = c("Left", "Left", "Left", "Left", "Left", 
       "Left", "Left", "Left", "Left", "Right", "Right", "Right", "Right", 
       "Right", "Right", "Right", "Right", "Right", "Left", "Left", 
       "Left", "Left", "Left", "Left", "Left", "Left", "Left", "Right", 
       "Right", "Right", "Right", "Right", "Right", "Right", "Right", 
       "Right"), Velocity = c(36, 36, 36, 36, 36, 36, 36, 36, 36, -36, 
       -36, -36, -36, -36, -36, -36, -36, -36, 36, 36, 36, 36, 36, 36, 
       36, 36, 36, -36, -36, -36, -36, -36, -36, -36, -36, -36), Duration = c(0.2, 
       0.2, 0.2, 0.5, 0.5, 0.5, 1, 1, 1, 0.2, 0.2, 0.2, 0.5, 0.5, 0.5, 
       1, 1, 1, 0.2, 0.2, 0.2, 0.5, 0.5, 0.5, 1, 1, 1, 0.2, 0.2, 0.2, 
       0.5, 0.5, 0.5, 1, 1, 1), n_runs = c(12, 12, 12, 12, 12, 12, 12, 
       12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 
       12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12), Response = c("H", 
       "M", "W", "H", "M", "W", "H", "M", "W", "H", "M", "W", "H", "M", 
       "W", "H", "M", "W", "H", "M", "W", "H", "M", "W", "H", "M", "W", 
       "H", "M", "W", "H", "M", "W", "H", "M", "W"), n_hits = c(8, 1, 
       3, 10, 1, 1, 10, 2, 0, 10, 2, 0, 11, 1, 0, 10, 2, 0, 8, 3, 1, 
       9, 0, 3, 9, 3, 0, 10, 2, 0, 10, 2, 0, 12, 0, 0), p_test = c(0.66666667, 
       0.08333333, 0.25, 0.83333333, 0.08333333, 0.08333333, 0.83333333, 
       0.16666667, 0, 0.83333333, 0.16666667, 0, 0.91666667, 0.08333333, 
       0, 0.83333333, 0.16666667, 0, 0.66666667, 0.25, 0.08333333, 0.75, 
       0, 0.25, 0.75, 0.25, 0, 0.83333333, 0.16666667, 0, 0.83333333, 
       0.16666667, 0, 1, 0, 0)), class = "data.frame", row.names = c(NA, 
       -36L))

我要实现的目标是以某种方式绘制StartPos及其方向,持续时间和百分比(H,M,W; Hit,Miss,Wrong)的图形-以便将每种组合的百分比堆叠在一个条上。 这对我来说很难解释,所以我只向您展示我已经尝试过的内容:

df36= ggplot() +
  geom_bar(data=df, mapping=aes(x=as.factor(StartPos), fill=Duration, 
  y=p_test),stat="identity", position="dodge2") + 
  labs(x="StartPos", y="Hitrate") + ggtitle("Velocity 36°") + theme_bw() +
  scale_fill_gradient(low="red", high="green")


df36

结果图如下:

在此处输入图片说明

看起来有些拥挤和混乱-但我会讲到重点。 红色条表示持续时间为0.2s,棕色为0.5s和绿色为1.0s。 每种颜色的第一个栏显示“命中”百分比,第二个栏显示“未命中”百分比,最后一个栏显示“错误”百分比。 还有起始位置6和8。startPos 6左侧的三种颜色是“刺激”,方向为“左”。 StartPos 6右边的直接三种颜色是Stimuli,方向正确-StartPos 8完全相同。

这基本上是我需要的东西-但看起来不太好。 我要实现的是“堆叠” H,M和W的百分比-以便每个“命中百分比”旁边都没有“小”小节,并对其进行标记,以区分H和M的百分比,依此类推。 。如果不可能,我想用不同的颜色绘制/着色响应,并在图例中显示它们,例如〜M黑色和W黄色。

有什么办法吗? 我有点迷路了。 提前致谢!

这并不是您想要的(它不使用position="dodge2" ),但是我认为所产生的输出要比在单个x轴上绘制所有数据更清晰。 这样,将变量分组以便于标记和解释,这应该是绘图的主要目标。 我们用fill = Response堆叠条形,然后使用facet_grid拆分组。 scale_fill_gradientscale_fill_gradient ,我不认为scale_fill_gradient应该用于分类变量。

# set facet labels
facet_labels <- as_labeller(c(`Left` = "Direction = Left", `Right` = "Direction = Right", `6` = "StartPos = 6", `8` = "StartPos = 8"))

ggplot(df) + 
    geom_col(aes(x = as.factor(Duration), y = p_test, fill = Response)) + 
    facet_grid(Direction ~ StartPos, switch = "y", labeller = facet_labels) +
    xlab("Duration") +
    ylab("Response proportion")

输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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