geom_line()绘图创建奇怪的水平分层线,这是减少轴刻度的第二个问题

时间:2018-09-06 16:10:23

标签: r ggplot2

在ggplot2中做一个非常简单的代码,在其中我有两列的大df,一个显示日期,另一个显示百分比。

#snippet of df this, goes on for 5,000+ rows

      date        percent
1     1997-04-15  0.78
2     1997-04-16  0.77
3     1997-04-17  0.77
4     1997-04-18  0.77
5     1997-04-21  0.77

# also the dput() of the df not sure if I did this right
structure(list(date = structure(c(9966, 9967, 9968, 9969, 9972, 
9973, 9974, 9975, 9976, 9979, 9980, 9981, 9982, 9983, 9986), class = "Date"), 
percent = c("0.78", "0.77", "0.77", "0.77", "0.77", "0.79", 
"0.79", "0.79", "0.79", "0.79", "0.79", "0.79", "0.79", "0.79", 
"0.79")), .Names = c("date", "percent"), row.names = c(NA, 

15L),类=“ data.frame”)

目前我的ggplot()很简单

ggplot( short_df, aes( date, percent ) ) + geom_line()

我尝试绘制一个df的小片段,以很好地了解该图的外观,对此我感到很高兴:

enter image description here

当我做geom_point()时,情节似乎还不错。

我的第二个问题是,在绘制整个df时,该图似乎包括每个百分比值:

img

我将scale_y_discrete( breaks = pretty( DF$percent ) )添加到前面的代码中,当我使用short_df时,情节似乎将刻度线很好地分开了:

img

但是,当我在实际df上执行操作时,它向我显示了带有一个刻度的y轴:

img

我确实收到警告:

  

警告信息:   在pretty.default(BSD $ percent)中:强制引入的NA

1 个答案:

答案 0 :(得分:1)

您的问题是“百分比”是字符类型:

str(short_df)

'data.frame':   15 obs. of  2 variables:
 $ date   : Date, format: "1997-04-15" "1997-04-16" "1997-04-17" "1997-04-18" ...
 $ percent: chr  "0.78" "0.77" "0.77" "0.77" ...

因此, ggplot 将“百分比”视为类别,并且不连接类别之间的线。将“百分比”转换为数字可解决此问题:

short_df$percent <- as.numeric(df$percent)

ggplot(short_df, aes( date, percent ) ) + geom_line()

enter image description here

偶然地,使用geom_point()的绘图版本不正确。您可以看到 ggplot 正在绘制每个唯一的“百分比”值(同样,字符/类别数据类型的行为)。将“百分比”转换为数字数据后, ggplot 可以正确计算一系列间隔良好的轴刻度。