1

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

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 文件中输入十进制值并Percent通过 Microsoft Excel 将列的格式转换为百分比来创建的。

当我尝试用ggplot

data <- read.csv("GCdataViz/test2.csv")
p <- ggplot(data, aes(x=Date, y=Percent, group=1)) + 
  geom_point(size = 3) 
p

我得到这张图

在此处输入图像描述

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

4

2 回答 2

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) 

在此处输入图像描述

于 2013-08-11T08:36:06.137 回答
2

Sven 的回答让 OP 在回家的大部分路上得到了 OP,但我相信 OP 根本不希望为原始 Excel 工作表中空白的值绘制任何点。这可以通过以下两种方式之一来完成:

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

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

于 2013-08-11T14:37:44.213 回答