【问题标题】:ggplot - control line width in pointsggplot - 以点为单位控制线宽
【发布时间】:2018-05-10 09:47:19
【问题描述】:

我有以下数据:

d = data.frame(x=rnorm(100), y=rnorm(100), w=sample(c(0,1,2), 100, replace=T))

我想绘制这些数据,因此每条线的宽度由 d$w 给出(理想情况下以“pt”为单位)。但是,我在使用 ggplot 时遇到了麻烦。事实上,即使 d$w 为零,ggplot 仍然会画一条线:

ggplot(d, aes(x=x,y=y)) + geom_line(aes(size=w)) + scale_size_continuous(range=c(0,2))

关于如何解决这个问题的任何想法?我知道我可以用 NA 替换零,但我更担心的是比例本身不正确。有什么方法可以用有意义的固定单位测量线宽?

【问题讨论】:

  • 不要将 size 放在对 aes 的调用中。试试看,ggplot(d, aes(x=x,y=y),size=w) + geom_line() + scale_size_continuous(range=c(0,2))
  • 我收到此错误:层错误(数据 = 数据,映射 = 映射,stat = stat,geom = GeomLine,:找不到对象 'w'
  • 奇怪,我逐字复制了您的代码,但从未收到此错误。 d = data.frame(x=rnorm(100), y=rnorm(100), w=sample(c(0,1,2), 100, replace=T)) ggplot(d, aes(x=x,y=y),size=w) + geom_line() + scale_size_continuous(range=c(0,2))
  • 我的错误。我在 geom_line() 中添加了“大小”参数。但是,使用您提出的解决方案并不能解决问题。事实上,现在看起来所有的线条都以相同的宽度绘制。这对你有用吗?
  • 不,它也不适合我。我的错误,我没有正确理解这个问题。本质上,您需要根据变量值绘制不同的线宽,不包括零值?

标签: r plot ggplot2 width


【解决方案1】:

一种可能的解决方案是过滤零值。

library(dplyr)
library(ggplot2)
d = data.frame(x=rnorm(100), y=rnorm(100), w=sample(c(0,1,2), 100, replace=T))

ggplot(d %>%
         filter(w>0), aes(x=x,y=y)) + 
  geom_line(aes(size=w)) + 
  scale_size_continuous(range=c(0,2))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2015-07-04
    • 2017-08-21
    • 2012-10-20
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    相关资源
    最近更新 更多