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