Aesthetics must either be length one, or the same length as the dataProblems

后端 未结 5 557
[愿得一人]
[愿得一人] 2020-12-05 04:09

I would like to make a plot with X values as a subset of the measurement and Y-values as another subset of the measured data.

In the example as below, I have 4 produ

相关标签:
5条回答
  • 2020-12-05 04:42

    It is better to not subset the variables inside aes(), and instead transform your data:

    df1 <- unstack(df,form = price~product)
    df1$skew <- rep(letters[2:1],each = 4)
    
    p1 <- ggplot(df1, aes(x=p1, y=p3, colour=factor(skew))) + 
            geom_point(size=2, shape=19)
    p1
    
    0 讨论(0)
  • 2020-12-05 04:47

    Similar to @joran's answer. Reshape the df so that the prices for each product are in different columns:

    xx <- reshape(df, idvar=c("skew","version","color"),
                  v.names="price", timevar="product", direction="wide")
    

    xx will have columns price.p1, ... price.p4, so:

    ggp <- ggplot(xx,aes(x=price.p1, y=price.p3, color=factor(skew))) +
           geom_point(shape=19, size=5)
    ggp + facet_grid(color~version)
    

    gives the result from your image.

    0 讨论(0)
  • 2020-12-05 04:53

    I encountered this problem because the dataset was filtered wrongly and the resultant data frame was empty. Even the following caused the error to show:

    ggplot(df, aes(x="", y = y, fill=grp))
    

    because df was empty.

    0 讨论(0)
  • 2020-12-05 04:56

    The problem is that skew isn't being subsetted in colour=factor(skew), so it's the wrong length. Since subset(skew, product == 'p1') is the same as subset(skew, product == 'p3'), in this case it doesn't matter which subset is used. So you can solve your problem with:

    p1 <- ggplot(df, aes(x=subset(price, product=='p1'),
                         y=subset(price, product=='p3'),
                         colour=factor(subset(skew, product == 'p1')))) +
                  geom_point(size=2, shape=19)
    

    Note that most R users would write this as the more concise:

    p1 <- ggplot(df, aes(x=price[product=='p1'],
                         y=price[product=='p3'],
                         colour=factor(skew[product == 'p1']))) +
                  geom_point(size=2, shape=19)
    
    0 讨论(0)
  • 2020-12-05 04:56

    I hit this error because I was specifying a label attribute in my geom (geom_text) but was specifying a color in the top level aes:

    df <- read.table('match-stats.tsv', sep='\t')
    library(ggplot2)
    
    # don't do this!
    ggplot(df, aes(x=V6, y=V1, color=V1)) +
      geom_text(angle=45, label=df$V1, size=2)
    

    To fix this, I just moved the label attribute out of the geom and into the top level aes:

    df <- read.table('match-stats.tsv', sep='\t')
    library(ggplot2)
    
    # do this!
    ggplot(df, aes(x=V6, y=V1, color=V1, label=V1)) +
      geom_text(angle=45, size=2)
    
    0 讨论(0)
提交回复
热议问题