Machen die Grenze auf, ein Balken dunkler als die anderen
Habe ich eine Balkenanzeige in ggplot2, wo die 3 Balken repräsentieren die Wahrscheinlichkeit, das 1 der 3 Möglichkeiten.
Möchte ich hinzufügen, dass ein Fett Rand um die Leiste, die zeigt die richtige Reaktion.
Habe ich noch keinen Weg gefunden, dies zu tun. Ich kann ändern Sie die Farbe ALLER Balken aber nicht nur die eine.
Bild im Anhang zeigt die raster-Grafiken habe ich erstellt. In der leftCust Spalte möchte ich alle Balken mit 'linken' unter Ihnen haben eine mutige Grenze.
In der rightCust Spalte möchte ich hinzufügen, dass die Fett-Grenze für alle bars mit Recht unter Ihnen.
Und schließlich in die SIMCust Spalte möchte ich alle Balken mit SIM-unten Sie haben eine mutige Grenze.
Dies ist im wesentlichen markieren die richtige Antwort und machen es leichter zu erklären, was die Graphen zeigen.
CODE:
dataRarrangeExpD <- read.csv("EXP2D.csv", header =TRUE);
library(ggplot2)
library("matrixStats")
library("lattice")
library("gdata")
library(plyr)
library(doBy)
library(Epi)
library(reshape2)
library(graphics)
#Create DataFrame with only Left-to-Right Visual Presentation
DataRearrangeD <- dataRarrangeExpD[, c("correct","Circle1", "Beep1","correct_response", "response", "subject_nr")]
#data_exp1$target_coh > 0
# Add new columns to hold choices made
DataRearrangeD[c("RightChoice", "LeftChoice", "SimChoice")] <- 0
DataRearrangeD$RightChoice <- ifelse(DataRearrangeD$response == "l", 1, 0)
DataRearrangeD$LeftChoice <- ifelse(DataRearrangeD$response == "a", 1, 0)
DataRearrangeD$SimChoice <- ifelse(DataRearrangeD$response == "space", 1, 0)
Exp2D.data = DataRearrangeD
# Construct data frames of report probability
SIM.vis.aud.df = aggregate(SimChoice ~ Circle1 + Beep1 + subject_nr, data = Exp2D.data, mean)
RightFirst.vis.aud.df = aggregate(RightChoice ~ Circle1 + Beep1 + subject_nr, data = Exp2D.data, mean)
LeftFirst.vis.aud.df = aggregate(LeftChoice ~ Circle1 + Beep1 + subject_nr, data = Exp2D.data, mean)
# combine data frames
mean.vis.aud.df = data.frame(SIM.vis.aud.df, RightFirst.vis.aud.df$RightChoice, LeftFirst.vis.aud.df$LeftChoice)
colnames(mean.vis.aud.df)[5:5] = c("Right")
colnames(mean.vis.aud.df)[6:6] = c("Left")
colnames(mean.vis.aud.df)[4:4] = c("SIM")
colnames(mean.vis.aud.df)[1:2] = c("Visual", "Audio")
# using reshape 2, we change the data frame to long format## measure.var column 3 up to column 5 i.e. 3,4,5
mean.vis.aud.long = melt(mean.vis.aud.df, measure.vars = 4:6, variable.name = "Report", value.name = "Prob")
# re-order levels of Report for presentation purposes
mean.vis.aud.long$Report = Relevel(mean.vis.aud.long$Report, ref = c("Left", "SIM", "Right"))
mean.vis.aud.long$Visual = Relevel(mean.vis.aud.long$Visual, ref = c("LeftCust","SIMCust","RightCust"))
#write.table(mean.vis.aud.long, "C:/Documents and Settings/psundere/My Documents/Analysis/Exp2_Pilot/reshape.txt",row.names=F)
##############################################################################################
##############################################################################################
# Calculate SD, SE Means etc.
##############################################################################################
##############################################################################################
CalSD <- mean.vis.aud.long[, c("Prob", "Report", "Visual", "Audio", "subject_nr")]
# Get the average effect size by Prob
CalSD.means <- aggregate(CalSD[c("Prob")],
by = CalSD[c("subject_nr", "Report", "Visual", "Audio")], FUN=mean)
#"correct","Circle1", "Beep1","correct_response", "response", "subject_nr"
# multiply by 100
CalSD.means$Prob <- CalSD.means$Prob*100
# Get the sample (n-1) standard deviation for "Probability"
CalSD.sd <- aggregate(CalSD.means["Prob"],
by = CalSD.means[c("Report","Visual", "Audio")], FUN=sd)
# Calculate SE --> SD /sqrt(N)
CalSD.se <- CalSD.sd$Prob / sqrt(25)
SE <- CalSD.se
# Confidence Interval @ 95% --> Standard Error * qt(0.975, N-1) SEE help(qt)
#.975 instead of .95 becasuse the 5% is 2.5% either side of the distribution
ci <- SE*qt(0.975,24)
##############################################################################################
##############################################################################################
###################################################
# Bar Graph
#mean.vis.aud.long$Audio <- factor (mean.vis.aud.long$Audio, levels = c("left", "2centre","NoBeep", "single","right"))
AggBar <- aggregate(mean.vis.aud.long$Prob*100,
by=list(mean.vis.aud.long$Report,mean.vis.aud.long$Visual, mean.vis.aud.long$Audio),FUN="mean")
#Change column names
colnames(AggBar) <- c("Report", "Visual", "Audio","Prob")
# Change the order of presentation
#CondPerRow$AuditoryCondition <- factor (CondPerRow$AuditoryCondition, levels = c("NoBeep", "left", "right"))
prob.bar = ggplot(AggBar, aes(x = Report, y = Prob, fill = Report)) + theme_bw() + facet_grid(Audio~Visual)
prob.bar + geom_bar(position=position_dodge(.9), stat="identity", colour="black") + theme(legend.position = "none") + labs(x="Report", y="Probability of Report") + scale_fill_grey() +
labs(title = expression("Visual Condition")) +
theme(plot.title = element_text(size = rel(1)))+
geom_errorbar(aes(ymin=Prob-ci, ymax=Prob+ci),
width=.2, # Width of the error bars
position=position_dodge(.9))+
theme(plot.title = element_text(size = rel(1.5)))+
scale_y_continuous(limits = c(0, 100), breaks = (seq(0,100,by = 10)))
Dies ist, was AggBar sieht aus wie nach manipulation nur vor der Erzeugung der Graphen:
Report Visual Audio Prob
1 Left LeftCust 2centre 81.84
2 SIM LeftCust 2centre 13.52
3 Right LeftCust 2centre 4.64
4 Left SIMCust 2centre 17.36
5 SIM SIMCust 2centre 69.76
6 Right SIMCust 2centre 12.88
7 Left RightCust 2centre 8.88
8 SIM RightCust 2centre 13.12
9 Right RightCust 2centre 78.00
10 Left LeftCust left 94.48
11 SIM LeftCust left 2.16
12 Right LeftCust left 3.36
13 Left SIMCust left 65.20
14 SIM SIMCust left 21.76
15 Right SIMCust left 13.04
16 Left RightCust left 31.12
17 SIM RightCust left 4.40
18 Right RightCust left 64.48
19 Left LeftCust NoBeep 66.00
20 SIM LeftCust NoBeep 26.08
21 Right LeftCust NoBeep 7.92
22 Left SIMCust NoBeep 10.96
23 SIM SIMCust NoBeep 78.88
24 Right SIMCust NoBeep 10.16
25 Left RightCust NoBeep 8.48
26 SIM RightCust NoBeep 26.24
27 Right RightCust NoBeep 65.28
28 Left LeftCust right 62.32
29 SIM LeftCust right 6.08
30 Right LeftCust right 31.60
31 Left SIMCust right 17.76
32 SIM SIMCust right 22.16
33 Right SIMCust right 60.08
34 Left RightCust right 5.76
35 SIM RightCust right 3.60
36 Right RightCust right 90.64
37 Left LeftCust single 49.92
38 SIM LeftCust single 47.84
39 Right LeftCust single 2.24
40 Left SIMCust single 6.56
41 SIM SIMCust single 87.52
42 Right SIMCust single 5.92
43 Left RightCust single 3.20
44 SIM RightCust single 52.40
45 Right RightCust single 44.40
.
.
.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Mit dem code, vorgetragen von Troy unten habe ich eine kleine Drehung auf und kam mit einer kleinen Lösung für den Mangel von mustern in ggplot2 für Balkendiagramme.
Hier ist der code, den ich verwendet, um fügen Sie vertikale Linien, um die Stangen zu erreichen, ein Grundmuster für die richtige Antwort bars. Ich bin sicher, dass Sie kluge Leute, die es könnte passen dieses an Ihre eigenen Bedürfnisse hinsichtlich textur/Muster, wenn auch grundlegenden:
######### ADD THIS LINE TO CREATE THE HIGHLIGHT SUBSET
HighlightDataCust <-AggBar[AggBar$Report==gsub("Cust", "", AggBar$Visual),]
#####################################################
prob.bar = ggplot(AggBar, aes(x = Report, y = Prob, fill = Report)) + theme_bw() + facet_grid(Audio~Visual)
prob.bar + geom_bar(position=position_dodge(.9), stat="identity", colour="black") + theme(legend.position = "none") + labs(x="Response", y="Probability of Report") + scale_fill_grey() +
######### ADD THIS LINE TO CREATE THE HIGHLIGHT SUBSET
geom_bar(data=HighlightDataCust, position=position_dodge(.9), stat="identity", colour="black", size=2)+
geom_bar(data=HighlightDataCust, position=position_dodge(.9), stat="identity", colour="black", size=0.5, width=0.85)+
geom_bar(data=HighlightDataCust, position=position_dodge(.9), stat="identity", colour="black", size=0.5, width=0.65)+
geom_bar(data=HighlightDataCust, position=position_dodge(.9), stat="identity", colour="black", size=0.5, width=0.45)+
geom_bar(data=HighlightDataCust, position=position_dodge(.9), stat="identity", colour="black", size=0.5, width=0.25)+
geom_bar(data=HighlightDataCust, position=position_dodge(.9), stat="identity", colour="black", width=0.0) +
######################################################
labs(title = expression("Visual Condition")) +
theme(text=element_text(size=18))+
theme(axis.title.x=element_text(size=18))+
theme(axis.title.y=element_text(size=18))+
theme(axis.text.x=element_text(size=12))+
geom_errorbar(aes(ymin=Prob-ci, ymax=Prob+ci),
width=.2, # Width of the error bars
position=position_dodge(.9))+
theme(plot.title = element_text(size = 18))+
scale_y_continuous(limits = c(0, 100), breaks = (seq(0,100,by = 10)))
Dies ist die Ausgabe. Klar die Linien können jede Farbe, die Sie wollen, und eine Mischung von Farben. Nur stellen Sie sicher, Sie beginnen mit der größten Breite und und die Arbeit in Richtung 0.0 so dass die Schichten nicht zu schreiben. Hoffe jemand findet das nützlich. (Es sollte auch möglich sein, erstellen Sie horizontale Linien in bars, wenn man mehrere Schichten mit unterschiedlichen y-Achsen-Höhen, d.h. die Spitze der jede abweichende bar Höhe angezeigt würde, wie eine horizontale Linie. Noch nicht getestet, mich aber kann es sein, lohnt ein Blick in für diejenigen, die erfordern mehr als einen bar-Muster. Die Kombination der beiden in eine bar führen sollte in einem mesh-Muster und vergessen Sie nicht, die verschiedenen Farben können auch verwendet werden. Kurzum: ich denke, dieser Ansatz ist eine anständige Lösung für das fehlende Muster in ggplot2.)
Habe ich ein Beispiel erstellt, der 3 Arten von Muster, die ich hier erwähnt: Wie Sie hinzufügen textur zu füllen die Farben in ggplot2?
- Können Sie re-Zweck Farbe? Es sieht nicht aus wie die graue Skala Färbung an den bars ist das hinzufügen der Informationen. Vielleicht können Sie diese verwenden, um stattdessen die richtige Antwort. Auch, code wäre nett.
- Leider muss ich kleben mit den grauen Balken. Farbe gewesen wäre eine schöne einfache Lösung. Cheers.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe nicht deine Daten, damit ich die
diamonds
dataset zu demonstrieren.Grundsätzlich müssen Sie zu "overplot" eine zweite
geom_bar()
nennen, wo Sie filtern diedata=
Attribut nur zeichnen die bars, die Sie markieren möchten. Filtern nur die original-Daten auszuschließen, was Sie nicht wollen. e.g unten wir replot die Teilmengediamonds[(diamonds$clarity=="SI2"),]
NB offenbar Ihren filter wird komplizierter sein, z.B.
OK aktualisiert mit Ihren Daten. Ich hatte, um das Vertrauen Abständen, weil Sie nicht in der AggBar2 Daten:
Ähnlich wie Troy Antwort, aber anstatt eine Schicht von unsichtbaren bars, die Sie verwenden können, die
size
ästhetische undscale_size_manual
:Erzeugt folgenden plot: