ggplot2 - 不使用 ggpaired 连接观察(点和线)

标签 ggplot2 plot bar-chart geom-bar

我使用 geom_bar 创建了一个条形图,x 轴(女性、男性)为“组”,y 轴为“值”。组进一步分割为“ session ”,因此男性和女性都有“ session 1”和“ session 2”(即总共四个小节)。

由于所有参与者都参加了第 1 次和第 2 次 session ,因此我在四个条形图的每一个上覆盖了一个点图 (geom_dot),以表示单个数据。

我现在试图将所有参与者的观察结果(“PID”)连接起来,在 session 1 和 session 2 之间。换句话说,应该有线连接 x 轴的“男性”部分上的几组两点(即每个参与者)和“女性部分”。

我用“geom_line”(下面)尝试了这个,但没有用(相反,它在“男性”中间创建了一条垂直线,在“女性”中间创建了另一条垂直线)。我不太确定如何解决这个问题。

见下面的代码:

ggplot(data_foo, aes(x=factor(Group),y=Values, colour = factor(Session), fill = factor(Session))) + 
          geom_bar(stat = "summary", fun.y = "mean", position = "dodge") + 
          geom_dotplot(binaxis = "y", stackdir = "center", dotsize = 1.0, position = "dodge", fill = "black") +
          geom_line(aes(group = PID), colour="dark grey") +
          labs(title='My Data',x='Group',y='Values') +
          theme_light() 

示例数据 (.txt)
data_foo <- readr::read_csv("PID,Group,Session,Values
P1,F,1,14
P2,F,1,13
P3,F,1,16
P4,M,1,18
P5,F,1,20
P6,M,1,27
P7,M,1,19
P8,M,1,11
P9,F,1,28
P10,F,1,20
P11,F,1,24
P12,M,1,10
P1,F,2,26
P2,F,2,21
P3,F,2,19
P4,M,2,13
P5,F,2,26
P6,M,2,15
P7,M,2,23
P8,M,2,23
P9,F,2,30
P10,F,2,21
P11,F,2,11
P12,M,2,19")

最佳答案

你遇到的麻烦是想被几组闪避 .您的 geom_line不知道怎么拆分Group变量 session .这里有两种方法可以解决这个问题。方法 1 可能是最“ggploty 方式”,并且是添加另一个分组而又不会使可视化过于拥挤的巧妙方法。对于方法 2,您需要更改 x 变量

1) 使用 facet
2) 使用 interaction为每个人拆分 session Group .为正确的柱线定单定义水平

我也用过 geom_point相反,因为 geom_dot更像是一种特定类型的直方图。
我一般会推荐 将箱线图用于此类图 像这样的值,因为条形更适合特定的度量,例如计数。

方法一 : 方面

library(ggplot2)
ggplot(data_foo, aes(x = Session, y = Values, fill = as.character(Session))) +
  geom_bar(stat = "summary", fun.y = "mean", position = "dodge") + 
  geom_line(aes(group = PID)) +
  geom_point(aes(group = PID), shape = 21, color = 'black') +
  facet_wrap(~Group)



创建于 2020-01-20 由 reprex package (v0.3.0)

方法二 :在您的 x 变量中创建一个交互项。请注意,您需要手动对因子水平进行排序。

data_foo <- data_foo %>% mutate(new_x = factor(interaction(Group,Session), levels = c('F.1','F.2','M.1','M.2')))

ggplot(data_foo, aes(x = new_x, y = Values, fill = as.character(Session))) + 
  geom_bar(stat = "summary", fun.y = "mean", position = "dodge") +
  geom_line(aes(group = PID)) +
  geom_point(aes(group = PID), shape = 21, color = 'black') 



创建于 2020-01-20 由 reprex package (v0.3.0)

但一切在视觉上都不是很引人注目。

关于ggplot2 - 不使用 ggpaired 连接观察(点和线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59741802/

相关文章:

用于 Linux 的 C++ 2D 绘图工具

python - 用垂直线绘制 pandas 数据框

python - 水平堆积条形图并为每个部分添加标签

r - 用ggplot2中的横杆连接意味着

r - 选择组合、顺序和树

r - 用纯色绘制一条线,用渐变绘制第二条线

algorithm - 有没有办法从情节中读取数据?

javascript - 如何使用选项从 Google 图表中删除轴?

python - 如何自定义条形注释以不显示选定值

r - 包装几个 ggplot2 函数并在 R 中使用带有运算符 "+"的包装器