[英]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_gradient
说scale_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.