我已经创建了一个测试数据集来重现这个问题:
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
我得到这张图
如您所见,绘制了空值,Y轴也是奇数... 3%数据点绘制在23%以上。似乎ggplot
对用百分比标准化轴做得不是很好。我有没有办法为Y轴设置正确的范围,假设我不知道百分比值(假设我被抽象为实际数据集,而不是百分比列)。
答案 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)
答案 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
,您无需进行任何进一步处理。