如何绘制包含大量因子的数据(Var1与Var2作为线图)

时间:2017-06-06 09:21:24

标签: r plot ggplot2 data-visualization

我有以下形式的一些数据:

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 Figure

然而,这个数字非常混乱,很难弄清楚不同因素的模式,特别是因为颜色编码为渐变。

我也试图为这些点使用不同的形状。

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)

facet_wrap fig

为了比较这些因素,我想在所有图中添加一条水平线。但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个因子而不是全部组成,并为每个较小的集合绘制图?

1 个答案:

答案 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')