Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在X轴上绘制两个分类变量和两个连续变量;填写「;使用ggplot2包?_R_Ggplot2 - Fatal编程技术网

R 如何在X轴上绘制两个分类变量和两个连续变量;填写「;使用ggplot2包?

R 如何在X轴上绘制两个分类变量和两个连续变量;填写「;使用ggplot2包?,r,ggplot2,R,Ggplot2,我有一个数据集,它有两个分类变量,即,Year和Category和两个连续变量TotalSales和AverageCount Year Category TotalSales AverageCount 1 2013 Beverages 102074.29 22190.06 2 2013 Condiments 55277.56 14173.73 3 2013 Confections 36415.75

我有一个数据集,它有两个分类变量,即,
Year
Category
和两个连续变量
TotalSales
AverageCount

    Year    Category      TotalSales    AverageCount
1   2013    Beverages      102074.29    22190.06
2   2013    Condiments      55277.56    14173.73
3   2013    Confections     36415.75    12138.58
4   2013    Dairy Products  30337.39    24400.00
5   2013    Seafood         53019.98    27905.25
6   2014    Beverages       81338.06    35400.00
7   2014    Condiments      55948.82    19981.72
8   2014    Confections     44478.36    24710.00
9   2014    Dairy Products  84412.36    32466.00
10  2014    Seafood         65544.19    14565.37
在MS Excel中,我们可以很高兴地得到同一表格的轴心图,以年份和类别为轴,TotalSales和AverageCount为sigma值

如何使用R绘制如图所示的图形,其中分类变量显示为同一图形中的多个层?

另外,我可以看到的一个选择是,将数据框拆分为两个单独的数据框(在我们的案例中,一个用于2013年,另一个用于2014年),并在一个单独的绘图上绘制两个图形,以多行排列以获得相同的效果。但是有没有办法像上面所示画出来呢


上面使用的样本数据

dat <- structure(list(Year = c(2013L, 2013L, 2013L, 2013L, 2013L, 2014L, 
2014L, 2014L, 2014L, 2014L), Category = structure(c(1L, 2L, 3L, 
4L, 5L, 1L, 2L, 3L, 4L, 5L), .Label = c("Beverages", "Condiments", 
"Confections", "Dairy Products", "Seafood"), class = "factor"), 
    TotalSales = c(102074.29, 55277.56, 36415.75, 30337.39, 53019.98, 
    81338.06, 55948.82, 44478.36, 84412.36, 65544.19), AverageCount = c(22190.06, 
    14173.73, 12138.58, 24400, 27905.25, 35400, 19981.72, 24710, 
    32466, 14565.37)), .Names = c("Year", "Category", "TotalSales", 
"AverageCount"), class = "data.frame", row.names = c(NA, -10L
)

dat您需要首先重新格式化数据,正如@EDi在您的一个老问题()和@docendo discimus的评论中所建议的那样

library(reshape2)
dat_l <- melt(dat, id.vars = c("Year", "Category"))
library(重塑2)

dat_l也许您可以先将这两个变量
重塑2::melt
为长格式?(未测试…)现场!这很有帮助。。第二,如果我还有一个分类变量,我可以做什么样的改进,这样我就有了一个可展示的输出?(虽然我觉得我应该补充一个新问题)很高兴它帮助了@sunitprasad1。当你说“多一个分类变量”时,你在想哪个变量?年份、产品类别或价值类型?对于其中任何一个,如果向数据框中添加额外的标高,则应使用相同的代码将其添加到绘图中。不过,我可能误解了这个问题。我同时试过了。我使用的表有
年度、季度、产品和类别
销售、计数
。我想知道如果我将
Quarter
添加到此代码中,我应该如何格式化、重新构造或以用户可读的格式排列数据,并查看它是如何运行的。嗯,添加第三个变量后的图表,虽然信息丰富,但非常混乱。我想我应该多尝试一下你在回答中提供的链接。如果我被卡住了,我将发布一个新问题。@sunitprasad1,如果您使用的是年和季度,听起来您可能想用两个变量来刻面。查看R的食谱,了解一些使用2个变量进行面处理的好例子。
library(ggplot2)
p <- ggplot(data = dat_l, aes(x = Category, y = value, group = variable, fill = variable))
p <- p + geom_bar(stat = "identity", width = 0.5, position = "dodge")
p <- p + facet_grid(. ~ Year)
p <- p + theme_bw()
p <- p + theme(axis.text.x = element_text(angle = 90))
p
dat <- structure(list(Year = c(2013L, 2013L, 2013L, 2013L, 2013L, 2014L, 
2014L, 2014L, 2014L, 2014L), Category = structure(c(1L, 2L, 3L, 
4L, 5L, 1L, 2L, 3L, 4L, 5L), .Label = c("Beverages", "Condiments", 
"Confections", "Dairy Products", "Seafood"), class = "factor"), 
    TotalSales = c(102074.29, 55277.56, 36415.75, 30337.39, 53019.98, 
    81338.06, 55948.82, 44478.36, 84412.36, 65544.19), AverageCount = c(22190.06, 
    14173.73, 12138.58, 24400, 27905.25, 35400, 19981.72, 24710, 
    32466, 14565.37)), .Names = c("Year", "Category", "TotalSales", 
"AverageCount"), class = "data.frame", row.names = c(NA, -10L
))