0

我有一个从 PostgreSQL 以 csv 格式导出的表,我想在 R 中创建一个堆积条形图。这是我在 R 中的第一个项目。

这是我的数据和我想做的事情:

在此处输入图像描述

它是该地区某个供应商的支线巴士服务质量。对于火车的每个用户,我们根据火车站的公交车和火车之间的同步分配服务质量,并计算服务理想或非常好、服务正确、服务不足或没有服务的用户百分比完全没有(链接到gis.stackexchange中的那个问题)

所以,就像使用我的第一列作为我的 x 轴标签和我的标题作为我的类别。每行的数据已经标准化为 100%。

在 Excel 中,只需单击几下,我不介意输入几行代码,因为它是已经很长的 plpgsql 脚本的最终结果......我更愿意继续编码而不是转移到 Excel(我还有几十个要做)。

因此,我尝试使用 Nathan Yau 的“Visualize This”和“R in Action”一书中的示例创建一个堆叠条,但并不十分成功。通常,他们的示例使用与 R 聚合并使用的数据。我的已经聚合了。

所以,我终于想出了在 R 中有效的东西:

在此处输入图像描述

但我不得不对我的数据进行相当多的转换:

在此处输入图像描述

我不得不转置我的表格并删除我的现在行(前列)标识符。

这是我的代码:

# load libraries
library(ggplot2)
library(reshape2)

# load data
stl <- read.csv("D:/TEMP/rabat/_stl_rabattement_stats_mtl.csv", sep=";", header=TRUE)

# reshape for plotting
stl_matrix <- as.matrix(stl)

# make a quick plot
barplot(stl_matrix, border=NA, space=0.1, ylim=c(0, 100), xlab="Trains", ylab="%",
main="Qualité du rabattement, STL", las = 3)

有什么方法可以使用我的原始 csv 并获得相同的结果?

我在这里有点迷路了......

谢谢!!!!

4

2 回答 2

1

看来您手动转置了矩阵。这可以在 R 中使用t()函数来完成。

在该行之后添加以下as.matrix(stl)行:

stl_matrix <- t(stl_matrix)

于 2013-11-01T15:10:09.830 回答
1

试试ggplot2andreshape库。你应该能够得到你想要的图表

stl$train_order <- as.numeric(rownames(stl))
stl.r <- melt(stl, id.vars = c("train_no", "train_order"))
stl.r$train_no <- factor(
    stl.r$train_no, 
    levels = stl$train_no[order(stl$train_order)])    
ggplot(stl.r, aes(x = factor(train_no), y = value, fill = variable)) + geom_bar(stat = 'identity')
于 2013-11-01T15:15:33.170 回答