r - ggplot 多个系列的百分比值
问题描述
我正在尝试使用 ggplot 创建四个百分比系列的线图。下面包含的示例数据...输出应将“周”作为 x 轴,将每个系列的数字百分比作为单独的 y 轴线图。
我尝试按照在 R 中的同一图表上绘制多个列中的说明进行操作。数据框融化得很好,但绘图失败。
此测试的数据:将以下内容另存为“pct.txt”并根据提供的代码使用 dget。
结构(列表(NoRep = c(“2.2%”、“10.7%”、“7.9%”、“100%”、“100%”、“5.6%”、“2.9%”、“3%”、“3.9 %”、“4.7%”、“3.9%”、“3.1%”、“2%”、“2.4%”、“2.4%”、“17.7%”、“2.1%”、“7.4%”、“1.9” %", "8%"), 报告 = c("46.5%", "33.4%", "36.4%", "0%", "0%", "42.2%", "43.8%", "39.2 %”、“36.8%”、“36.1%”、“36.1%”、“35.8%”、“37.7%”、“26.6%”、“26.9%”、“53.4%”、“39.9%”、“32.9” %", "40.9%", "41.9%"), Mobile_Internet = c("14.4%", "13.6%", "1.2%"、“0%”、“0%”、“2.4%”、“11.7%”、“11%”、“10.2%”、“10.1%”、“9.1%”、“39.8%”、“39%” , "39.2%", "38.8%", "16.8%", "31.1%", "29.2%", "28.8%", "27.4%"), Mobile_SMS = c("36.9%", "42.3%" 、“54.5%”、“0%”、“0%”、“49.9%”、“41.6%”、“46.8%”、“49.1%”、“49%”、“50.9%”、“21.3%” , "21.2%", "31.9%", "31.9%", "12%", "26.9%", "30.5%", "28.3%", "22.7%"), 周 = c("2018_W48", “2018_W49”、“2018_W50”、“2018_W51”、“2018_W52”、“2019_W01”、“2019_W02”、“2019_W03”、“2019_W04”、“2019_W05”、“2019_W06”、“2019_W07”、“2019_W08”、“2019_W09”、“2019_W10”、“2019_W11”、“2019_W12”、“2019_W19”、 ", "2019_W15" )), .Names = c("NoRep", "Report", "Mobile_Internet", "Mobile_SMS", "Week"), row.names = c("2018_W48", "2018_W49", "2018_W50 ”、“2018_W51”、“2018_W52”、“2019_W01”、“2019_W02”、“2019_W03”、“2019_W04”、“2019_W05”、“2019_W06”、“2019_W07”、“2019_W08”、“2019_W09”、“20” “2019_W11”、“2019_W12”、“2019_W13"、"2019_W14"、"2019_W15")、类 = "data.frame")
test <- dget(file="pct.txt")
tmp <- melt(test, id.vars = "Week")
ggplot(tmp, aes(Week, value, col=variable))+
geom_line()
我收到错误“geom_path:每个组仅包含一个观察值。您需要调整组美学吗?”
解决方案
错误消息是正确的,您所要做的就是添加组美学。
library(ggplot2)
pct <- structure(list(NoRep = c("2.2%", "10.7%", "7.9%", "100%", "100%", "5.6%", "2.9%", "3%", "3.9%", "4.7%", "3.9%", "3.1%", "2%", "2.4%", "2.4%", "17.7%", "2.1%", "7.4%", "1.9%", "8%"), Report = c("46.5%", "33.4%", "36.4%", "0%", "0%", "42.2%", "43.8%", "39.2%", "36.8%", "36.1%", "36.1%", "35.8%", "37.7%", "26.6%", "26.9%", "53.4%", "39.9%", "32.9%", "40.9%", "41.9%"), Mobile_Internet = c("14.4%", "13.6%", "1.2%", "0%", "0%", "2.4%", "11.7%", "11%", "10.2%", "10.1%", "9.1%", "39.8%", "39%", "39.2%", "38.8%", "16.8%", "31.1%", "29.2%", "28.8%", "27.4%"), Mobile_SMS = c("36.9%", "42.3%", "54.5%", "0%", "0%", "49.9%", "41.6%", "46.8%", "49.1%", "49%", "50.9%", "21.3%", "21.2%", "31.9%", "31.9%", "12%", "26.9%", "30.5%", "28.3%", "22.7%"), Week = c("2018_W48", "2018_W49", "2018_W50", "2018_W51", "2018_W52", "2019_W01", "2019_W02", "2019_W03", "2019_W04", "2019_W05", "2019_W06", "2019_W07", "2019_W08", "2019_W09", "2019_W10", "2019_W11", "2019_W12", "2019_W13", "2019_W14", "2019_W15" )), .Names = c("NoRep", "Report", "Mobile_Internet", "Mobile_SMS", "Week"), row.names = c("2018_W48", "2018_W49", "2018_W50", "2018_W51", "2018_W52", "2019_W01", "2019_W02", "2019_W03", "2019_W04", "2019_W05", "2019_W06", "2019_W07", "2019_W08", "2019_W09", "2019_W10", "2019_W11", "2019_W12", "2019_W13", "2019_W14", "2019_W15"), class = "data.frame")
pct_long <- tidyr::gather(pct, "variable", "value", -c("Week"))
ggplot(pct_long, aes(Week, value, col = variable, group = variable)) + geom_line()
请注意,在数据中包含 % 符号意味着 ggplot 不知道如何正确绘制 y 轴。在加载数据后替换它是相对简单的使用gsub
.
pct_long$value_numeric <- as.numeric(gsub("%", "", pct_long$value))
ggplot(pct_long, aes(Week, value_numeric, col = variable, group = variable)) + geom_line()
推荐阅读
- swift - 使用 UINavigationController 执行 segue(没有 IBAction)
- karate - 在功能中设置 Karate-config.js 值
- python - Python中的数据操作
- php - 如何在foreach中制作索引并将其制作为json?
- unix - 使用可变输入位置从 awk 调用函数
- php - 如何根据数据库中包含的信息量显示日期数据?
- javascript - 角度功能路由模块 - 未加载子组件
- python - Python:装饰器调度程序:Catch-22
- dialog - 如何关闭颤振对话框?
- perl - 我们如何在 Moo 或 Moose 中动态创建缺失的属性?