我使用geom_bar创建了条形图,其中x轴为“组”(女性,男性),y轴为“值”。分组进一步细分为“会话”,以便男性和女性都有“会话1”和“会话2”(即总共四个条)。
由于所有参与者都参加了会议1和2,因此我在四个条形图的每个条形图上覆盖了一个点图(geom_dot),以表示各个数据。
我现在正在尝试在会话1和2之间连接所有参与者的观测值(“ PID”)。换句话说,应该在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")
答案 0 :(得分:2)
您遇到的麻烦是您想分几组躲避。您的geom_line
不知道如何将Group
变量除以session
。这是解决此问题的两种方法。方法1可能是最“ ggploty”方法,也是一种在不使可视化文件过于拥挤的情况下添加另一个分组的巧妙方法。对于方法2,您需要更改x变量
1)使用facet
2)使用interaction
为每个Group
划分会话。定义右栏顺序的水平
我还改用了geom_point
,因为geom_dot
是更特定的直方图类型。
我通常建议对这样的值图使用框线图,因为条形图更适合于诸如计数之类的特定度量。
方法1 :构面
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)
由reprex package(v0.3.0)于2020-01-20创建
方法2 :在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')
由reprex package(v0.3.0)于2020-01-20创建
但是,一切在视觉上都不是很吸引人。