我有以下形式的一些数据:
Factor Var1 Var2
1 100 1.5
2 150 1.2
3 90 1.9
......
1 80 2.0
2 96 2.1
3 50 2.9
我必须将Var2的变化与Var1进行比较,以了解不同的因素。我们的想法是找出Var1中与Var2中的值较低的值的范围,以及哪个因子。 我有多达32个因素。
最好的方法是什么?
到目前为止,我已将其作为ggplot中的线图实现(见下图)。
ggplot(data = df, aes(x = df$var1, y = df$var2, colour = df$Factor)) +
geom_line(size=0.05) +
geom_point(size=0.8) +
coord_cartesian(ylim = c(0,5)) +
labs(x='var1', y='var2')
然而,这个数字非常混乱,很难弄清楚不同因素的模式,特别是因为颜色编码为渐变。
我也试图为这些点使用不同的形状。
ggplot(data = df, aes(x = df$var1, y = df$var2, colour = df$factor)) +
geom_line(size=0.05) +
geom_point(size=0.8, aes(shape=factor(df$Factor))) +
coord_cartesian(ylim = c(0,5)) +
labs(x='var1', y='var2')
但这会发出警告信息(见下文),并且不会显示所有因素的符号。
# Warning messages:
# 1: The shape palette can deal with a maximum of 6 discrete values because more than 6 becomes difficult to discriminate; you have 29. Consider specifying shapes manually if you must have them.
可视化数据中这种变化的最佳方法是什么?因素的数量可以变化(最多32)。
**正如所建议的,我尝试了facet_wrap(见下图)。
ggplot(data = df, aes(x = df$var1, y = df$var2)) + geom_line(size=0.05) + geom_point(size=0.8) + coord_cartesian(ylim = c(0,5)) + facet_wrap(~ df$Factor) + labs(x='var1', y='var2') #+ geom_hline(yintercept = 2)
为了比较这些因素,我想在所有图中添加一条水平线。但geom_hline(yintercept = 2)不起作用,给出以下错误信息:
Error in `$<-.data.frame`(`*tmp*`, "PANEL", value = c(6L, 8L, 24L, 26L, : replacement has 1170 rows, data has 1
如何在所有这些图中添加水平线? 或者,有没有办法将数据帧分成更小的数据帧,由5-6个因子而不是全部组成,并为每个较小的集合绘制图?
答案 0 :(得分:0)
如果您的因子水平具有内在顺序,那么最好将它们绘制为渐变,就像它们是数字一样:
df$Factor_numeric <- as.numeric(gsub("2MCT ", "", Factor))
ggplot(data = df,
aes(x = var1,
y = var2,
colour = Factor_numeric) +
geom_line(size=0.05) +
scale_colour_gradient(name = "Your Factor",
labels = function(breaks) paste0("2MCT ", breaks)) +
coord_cartesian(ylim = c(0,5)) +
labs(x='var1', y='var2')
另一种选择是在数据框中使用一个新的列,对您的因子进行分组,以便最终减少绘图:
df$grouped_Factor <- NA
df$grouped_Factor[df$Factor %in% paste0("2MCT ", 101:108)] <- "G1"
df$grouped_Factor[df$Factor %in% paste0("2MCT ", 109:118)] <- "G2"
df$grouped_Factor[df$Factor %in% paste0("2MCT ", 119:124)] <- "G3"
df$grouped_Factor[df$Factor %in% paste0("2MCT ", 125:132)] <- "G4"
ggplot(data = df,
aes(x = var1, y = var2, colour = Factor)) +
geom_line(size=0.05) +
geom_point(size=0.8) +
coord_cartesian(ylim = c(0,5)) +
facet_wrap(~ grouped_Factor) +
labs(x='var1', y='var2')