我还在学习R代码,所以这个问题可能很简单,但我就是搞不懂。
我想在三个不同的时间点上用置信区间来绘制平均分数:基线时,治疗后4个周期,治疗8个周期后。问卷包括感觉量表、运动量表和自主量表。所以我想画出每个时间点三个不同尺度的平均分数。所以我想要一个线图,在X轴上,时间点(基线,4个周期后,8个周期之后),在Y轴上,我想要分数,这个图表必须包含三个不同的颜色线,表示感觉,运动和自主尺度。我想用ggplot。
我有一个包含以下列的dataframe:
这就是我想要的:
我希望有人能帮我!事先非常感谢!
发布于 2020-07-02 16:28:05
这就是我想出的使用合成数据的方法。感谢您共享数据的结构,但是在将来最好是共享数据本身,这可以通过控制台中的dput(your.data.frame)
完成,然后将输出复制/粘贴到问题中作为代码.或者使用代码创建一个虚拟集,这就是我在这里要做的。
虚拟数据
library(tidyr)
library(dplyr)
library(ggplot2)
raw_df <- data.frame(
id=1:60,
c0sen=rnorm(60, 7, 0.2),
c4sen=rnorm(60, 8.5, 0.5),
c8sen=rnorm(60, 11, 1.2),
c0mot=rnorm(60, 6, 0.3),
c4mot=rnorm(60, 7.5, 0.5),
c8mot=rnorm(60, 9.6, 0.8),
c0aut=rnorm(60, 3, 0.1),
c4aut=rnorm(60, 2.9, 0.1),
c8aut=rnorm(60, 3.5, 0.8)
)
处理数据
在进行绘图之前,您需要准备使用ggplot2
绘图的数据集。与来自蒂德弗斯的其他包一样,您应该准备好数据以遵循整齐数据原则,这就是我在这里使用tidyr
和dplyr
包所做的工作。
您的数据按原样排列,有许多相同的信息分散到多个列中,我们需要将这些列合并在一起,但在每一列中也有我们需要分离的多个信息(时间和度量类型)。
第一步是将数据收集成“长”格式,其中有一个用于measure
(c0aut、c8mot等)的列,一个用于score
的列,同时维护id
列。然后,我们需要将measure
列分为两列:一列描述time
,另一列描述度量的type
。
df <- raw_df %>%
gather(key='measure', value='score', -id) %>%
separate(col=measure, into=c('c_time','type'), sep=2)
最后,我想修复c_time
,只需给出数字,我们可以这样做:
df <- df %>% separate(c_time, into=c('c', 'time'), sep=1) %>%
select(-c)
现在,应该注意到,df$time
实际上是一个字符向量(不是一个数值).但这实际上是可以的,因为我们希望ggplot2
将其视为序数因子,而不是数值,因为在x轴上,我们希望0、4和8均匀地分布。
绘制数据
既然您提到了这对您来说是新的,我将把地块代码分解成几个部分,这样就可以很容易地按照创建这个图所采取的步骤进行操作。首先,我们从基础开始,在此基础上,我们设置了数据和通用美学。请注意,color=
映射为类型,但group=
也是如此。这是必要的,这样ggplot2
就知道数据也应该按照类型进行分组(而不是将数据集作为一个整体)。这对我们将要画的几何画来说很重要。
p <- ggplot(df, aes(x=time, y=score, color=type, group=type))
Stats和geoms。我们然后用3次对stat_summary
的调用来绘制绘图区域上的数据,这些调用会绘制线条、错误条和点(按这个顺序)。错误条是使用均值+/-标准错误("mean_se")绘制的,当然也可以使用其他函数。我们还必须用错误条覆盖color=
美学,因为我们希望它们都是黑色的(而不是按类型着色),并且我们必须将shape=
美学添加到点中,这样我们就可以映射它以匹配您的情节。
p <- p + stat_summary(
geom='line', fun=mean) +
stat_summary(
geom='errorbar', fun.data=mean_se,
color='black', width=0.1) +
stat_summary(
geom='point', fun=mean, aes(shape=type))
scales .用于缩放,我通过重命名"0", "4", "8"
轴来设置x轴属性,并且我还将扩展设置为不像默认的那样展开,因为它看起来要好一些。scale_color
和scale_shape
调用对于同时进行一致性的更改非常重要,否则您将断开两个标度之间的连接,而ggplot2
实际上将显示两个不同的标度。
type_labels <- c('Autonomic', 'Motor', 'Sensory')
p <- p + scale_x_discrete(
name=NULL, labels=c('Baseline', '4 weeks', '8 weeks'),
expand=expansion(mult=0.05)) +
scale_color_manual(name=NULL, labels=type_labels, values=rainbow(3)) +
scale_shape_discrete(name=NULL, labels=type_labels)
主题元素。最后,我设置了主题元素,包括命名内容、保持theme_bw()
的整体整洁外观,以及在图例周围添加框(位于底部)。
p <- p + labs(
title='EORTC QLQ-CIPN20',
y='Symptom Score'
) +
theme_bw() +
theme(
legend.position='bottom',
legend.title=element_blank(),
legend.background = element_rect(color='black')
)
p
这些都给了你以下几点:
https://stackoverflow.com/questions/62699881
复制相似问题