2017-11-02 3 views
1

I mehrere CSV-Dateien mit dem gleichen Datenstruktur habenClustered und gestapelte Balkendiagramm mit mehreren CSV-Dateien

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

I eine gestapelte bar Stück mit URLs auf der x-Achse erzeugen kann, und A, B, C, D übereinander gestapelt.

Jetzt möchte ich gruppierte gestapelte Balkendiagramme erstellen, mit mehreren solchen CSV-Dateien, alle von der gleichen URL auf der X-Achse indiziert.

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") 

Fügen Sie dem Diagramm grundsätzlich data2 hinzu. Nicht sicher, ob ich sammeln oder Facetten verwenden oder manuell neue Spalten nach dem Schmelzen erstellen soll?

Es sollte wie folgt aussehen: enter image description here

Antwort

1

Ist das, was nach der du bist?

# 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)); 

Mit 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"))); 

Musterstück

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

enter image description here

Verwendung

Hinweis: Wenn Sie mehr csv Dateien haben, am besten zu df.list <- lapply(..., read.csv) und dann meltdf.list zu bekommen Spalten variable, value und L1 (die src entspricht).


aktualisieren

ich nicht ganz klar bin, was Sie nach, so ist dies ein bisschen ein Stich in der Dunkelheit. Sie können auch durch url (statt src) Cluster:

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

enter image description here

und/oder zeigen Bars Side-by-Side (statt gestapelt)

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

enter image description here

+0

Nee. df2 hat die gleichen Werte für die x-Achse, dh a.com und b.com. Sie möchten, dass diese zwei gestapelten Balkendiagramme gruppiert werden. –

+0

Siehe meine aktualisierte Antwort. Sie erwähnen nicht, dass Sie die gleichen "URL" -Einträge in allen Datensätzen haben, so dass die Leute raten ... –

+0

Ich werde meine Frage bearbeiten, um es klarer zu machen, aber da ich Clustered Barplots erwähnt habe, möchte ich sowohl die a.com-Plots nebeneinander. So etwas https://stackoverflow.com/questions/18774632/how-to-produce-stacked-bars-within-grouped-barchart-in-r –

Verwandte Themen