ggplot()限制行数

时间:2019-05-31 07:17:31

标签: r ggplot2 plot

我正在一对轴上绘制多个时间序列。该系列涵盖了一系列时间范围-例如有些涵盖一年,有些只有几个月。我希望结果图表在每个系列中绘制一条线,而每条线仅在该系列涵盖的时间范围内可见。

图表后面的数据是数据框(meltdf2)的格式,具有4列-月,用户,得分和风险。

一个简化的版本是:

Month   user   score   risk
jan-18  A      1       high
feb-18  A      1       high
mar-18  A      2       mid
apr-18  A      1       high
feb-18  B      1       high
mar-18  B      2       mid
apr-18  B      3       low
mar-18  C      3       low
apr-18  C      3       low

当前,图表显示三行,每位用户一条,每行覆盖整个图表。 理想情况下,我将有一个带有行A的图表将跨越图表的整个宽度,而行BC则将仅覆盖图表的一部分。

我尝试将BC未涵盖的月份的NA值包括在内,但它们的线仍覆盖整个图表。无法使用NA值路由,我尝试在一行上手动设置多种颜色,但这似乎不起作用。

我正在使用的当前代码如下:

#create colour palette based on discrete risk levels - used to specify manual colour scale in plot.
pal <- c("High"="red2","Mid"="gold","Low" = "limegreen","NA"= "NA")

#create plot with line and points.
#colour of points based on colour column of meltdf2
ggplot(data = meltdf2, aes(x = Month, y = user, group = user)) +
  geom_line(linetype = "dashed", colour = "grey") +
  geom_point(aes(colour = meltdf2$risk, size = 3)) +
  scale_colour_manual(values = pal, limits = names(pal)) +
  scale_x_date(date_breaks = "1 month" , date_labels = "%b-%y") +
  theme(axis.title.y=element_blank(), axis.text.y=element_blank(), axis.ticks.y=element_blank(),
        axis.line.x = element_line(colour = "darkgrey"),
        panel.background = element_rect(fill = "white"),
        panel.grid.major = element_blank(), panel.grid.minor = element_blank())

此代码产生以下图表:

Risk Level chart

理想情况下,每个系列的第一个数据点之前的每条虚线灰色部分都不会显示。

1 个答案:

答案 0 :(得分:0)

通过修改图表后面的数据框(meltdf2)解决了此问题。使用na.omit(meltdf2)删除了每个系列都没有数据的行,并防止了线条的绘制。 最终结果如下: enter image description here