在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的小片段,以很好地了解该图的外观,对此我感到很高兴:
当我做geom_point()
时,情节似乎还不错。
我的第二个问题是,在绘制整个df时,该图似乎包括每个百分比值:
我将scale_y_discrete( breaks = pretty( DF$percent ) )
添加到前面的代码中,当我使用short_df
时,情节似乎将刻度线很好地分开了:
但是,当我在实际df上执行操作时,它向我显示了带有一个刻度的y轴:
我确实收到警告:
警告信息: 在pretty.default(BSD $ percent)中:强制引入的NA
答案 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()
偶然地,使用geom_point()
的绘图版本不正确。您可以看到 ggplot 正在绘制每个唯一的“百分比”值(同样,字符/类别数据类型的行为)。将“百分比”转换为数字数据后, ggplot 可以正确计算一系列间隔良好的轴刻度。