具有多个csv文件的集群和堆积条形图

时间:2017-11-02 22:46:17

标签: r ggplot2 bar-chart

我有多个具有相同数据结构的csv文件

url, A,B,C,D
a.com,1,2,3,4
b.com,3,4,5,6

我可以创建一个堆积条形图,其中x轴上的URL和A,B,C,D堆叠在一起。

现在我想创建具有多个这样的csv文件的聚簇堆积条形图,所有这些都由x轴上的相同URL索引。

data1 = read.csv("data.csv")
data2 = read.csv("data2.csv")
data.m = melt(data1, id.var="url")

ggplot(data.m, aes(x = url, y = value, fill = variable)) + 
  geom_bar(position="fill",stat = "identity")

基本上将数据2添加到图中。不确定我是应该使用聚集或刻面还是在熔化后手动创建新列?

看起来应该是这样的: enter image description here

1 个答案:

答案 0 :(得分:2)

这是你之后的事吗?

# Two sample datasets
df1 <- cbind.data.frame(
    url = c("a.com", "b.com"),
    A = c(1, 3), B = c(2, 4), C = c(3, 5), D = c(4, 6));

df2 <- cbind.data.frame(
    url = c("a.com", "b.com"),
    A = c(5, 7), B = c(6, 8), C = c(7, 9), D = c(8, 10));

使用gather

# Using gather
require(tidyr);
df <- rbind.data.frame(
    gather(cbind.data.frame(df1, src = "df1"), variable, value, -url, -src),
    gather(cbind.data.frame(df2, src = "df2"), variable, value, -url, -src));

使用melt

# Using melt
require(reshape2);
df <- rbind.data.frame(
    melt(cbind.data.frame(df1, src = "df1"), id.vars = c("url", "src")),
    melt(cbind.data.frame(df2, src = "df2"), id.vars = c("url", "src")));

样本图

ggplot(df, aes(x = url, y = value, fill = variable)) + geom_bar(stat = "identity") + facet_wrap(~ src);

enter image description here

注意:如果您有多个csv个文件,最好是df.list <- lapply(..., read.csv),然后是melt df.list以获取列{{1} },variablevalue(对应L1)。

更新

我并不完全清楚你所追求的是什么,所以这在黑暗中有点刺痛。您也可以按src(而不是url)群集:

src

enter image description here

和/或并排显示条形(而非堆叠)

ggplot(df, aes(x = src, y = value, fill = variable)) + geom_bar(stat = "identity") + facet_wrap(~ url);

enter image description here