簡體   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