ggplot2点的大小(按数值):当值= 0

时间:2019-03-20 14:01:02

标签: r ggplot2

我想将两个时间序列的数据绘制在一起。 x轴将是日期,y轴将是系列1的折线图,而磅值将基于系列2的数值进行缩放。但是,当系列2 = 0时,我希望ggplot能够根本不显示任何点。我尝试将点大小的范围设置为最小0,但是它仍显示点的值为0。

以下代码可重现该问题:

Dates = c("2015-05-01", "2015-05-02", "2015-05-03", "2015-05-04", "2015-05-05", "2015-05-06")
Dates = as.Date(Dates)
Series1 = c(0,2,8,5,3,1)
Series2 = c(0,0,5,0,10,5)

df = data.frame(Dates, Series1, Series2)
ggplot(data = df)+
   geom_line(aes(x=Dates, y = Series1))+
   geom_point(aes(x=Dates, y = Series1, size = Series2))+
   scale_size_continuous(range = c(0, 5))

这将产生以下图形: PointSize=0 Displayed

当Series2 = 0时,如何使ggplot2不创建点,但仍显示该行? 我还尝试将Series2的NA替换为0,但这导致绘图失败。

2 个答案:

答案 0 :(得分:3)

您可以将最小值更改为负数:

ggplot(data = df) +
  geom_line(aes(x = Dates, y = Series1))+
  geom_point(aes(x = Dates, y = Series1, size = Series2))+
  scale_size_continuous(range = c(-1, 5)) 

如果您不希望图例包含0,则可以添加breaks

scale_size_continuous(range = c(-1, 5), breaks = seq(2.5, 10, 2.5)) 

enter image description here

答案 1 :(得分:1)

另一种选择是利用alpha使size == 0点不可见。我们将alpha中的aes设置为逻辑表达式Series2 == 0,然后使用scale_alpha_manualFALSE的值设置为1,如果{{ {1}}:

TRUE

enter image description here