为什么ggplot绘制空百分比数据点?

时间:2013-08-11 07:31:56

标签: r ggplot2

我已经创建了一个测试数据集来重现这个问题:

Date    Percent
2012-01 3.00%
2012-02 43.00%
2012-03 54.00%
2012-04 43.00%
2012-05 43.00%
2012-06 23.00%
2012-07 12.00%
2012-08 
2012-09 
2012-10 
2012-11 
2012-12 

这些百分比是通过在csv文件中输入十进制值并通过Microsoft Excel将Percent列的格式转换为百分比来创建的。

当我尝试使用ggplot

绘制此数据集时
data <- read.csv("GCdataViz/test2.csv")
p <- ggplot(data, aes(x=Date, y=Percent, group=1)) + 
  geom_point(size = 3) 
p

我得到这张图

enter image description here

如您所见,绘制了空值,Y轴也是奇数... 3%数据点绘制在23%以上。似乎ggplot对用百分比标准化轴做得不是很好。我有没有办法为Y轴设置正确的范围,假设我不知道百分比值(假设我被抽象为实际数据集,而不是百分比列)。

2 个答案:

答案 0 :(得分:4)

Percent是一个因素。默认情况下,因子标签按字母顺序排序。因此,3.00%位于12.00%之后。如果将Percent的值转换为数值:

,它将起作用

数据:

data <- read.table(text = "Date    Percent
2012-01 3.00%
2012-02 43.00%
2012-03 54.00%
2012-04 43.00%
2012-05 43.00%
2012-06 23.00%
2012-07 12.00%
2012-08 
2012-09 
2012-10 
2012-11 
2012-12 ", header = TRUE, fill = TRUE)

使用数值创建一个新变量Percent2

data <- transform(data,
                  Percent2 = replace(as.numeric(gsub("%", "", Percent)),
                                     Percent == "", 0))

#       Date Percent Percent2
# 1  2012-01   3.00%        3
# 2  2012-02  43.00%       43
# 3  2012-03  54.00%       54
# 4  2012-04  43.00%       43
# 5  2012-05  43.00%       43
# 6  2012-06  23.00%       23
# 7  2012-07  12.00%       12
# 8  2012-08                0
# 9  2012-09                0
# 10 2012-10                0
# 11 2012-11                0
# 12 2012-12                0

简介:

library(ggplot2)
ggplot(data, aes(x = Date, y = Percent2)) + 
  geom_point(size = 3) 

enter image description here

答案 1 :(得分:2)

Sven的答案在回家的路上大部分都是OP,但我相信OP不希望任何积分都为原始Excel表格中的空白值绘制。这可以通过以下两种方式之一完成:

  • 使用Sven的解决方案,然后使用data$Percent2[data$Percent2==0] <- NA。 (如果您的实际百分比值等于零,则会失败,以及空白值。)

  • 更好,我认为:将原始Excel工作表保存为.csv文件时,请确保将Percentage列格式化为Number(即{{ 1}}并选择Format -> Cells。)确保包含尽可能多的小数位,因为导出的文本文件只有您在屏幕上看到的小数位数。例如,如果只显示一个小数位,则值为Number的单元格将导出为=1/3。显然你需要乘以100才能得到R显示百分比值而不是小数部分。 R会将空格导入为0.3,您无需进行任何进一步处理。