我需要比较两种不同的方法,每种方法在一个图形中使用堆叠条形样式有3种不同的结果。
我想绘制一个图,以便x轴显示实验,y轴显示结果。每个栏以堆积条形式填充3个结果。
experiment method resuult1 result2 result3
1 m1 1 2 3
1 m2 4 5 6
2 m1 7 8 9
2 m2 10 11 12
3 m1 13 14 15
3 m2 16 17 18
我有这个代码用于比较两个数据集如何更改它。
library(ggplot2);
pdf(file = '$filename.pdf', width=5, height=5);
data1 <- as.matrix(read.table('$INPUT_FILE1', header = T));
data1.experiment <- as.numeric(data1[,\"Experiment\"]);
data1.obs <- as.numeric(data1[,\"Result1\"]);
data1.method <- as.factor(data1[,\"Method\"]);
df <- data.frame(data1.experiment, data1.method, data1.obs);
orderlist = c(&#34; 70&#34;,&#34; 100&#34;,&#34; 130&#34;,&#34; 160&#34;,&#34; 190&#34 ;,&#34; 260&#34;);
ggplot(df, aes(x = data1.experiment, y = data1.obs, fill = data1.method), ylim=c(60000, 2800000)) +
geom_bar(stat='identity', position='dodge')+
labs(x='$xlabel',y='$ylabel', fill='Methods') +
scale_fill_manual(values = c('red','blue'), labels = c('DTB-MAC', 'IEEE802.11P')) +
scale_x_continuous(breaks = orderlist)+
theme(legend.position = c(1, 1), legend.justification = c(1, 1), legend.background = element_rect(colour = NA, fill = 'white'));
答案 0 :(得分:2)
你说你需要比较这些方法。如果您在x轴上表示实验并在y上表示结果,那么您将如何表示方法???我这样做的方法是使用方面。以下是使用ggplot2进行操作的代码。
dat <- read.csv("data.csv")
library(reshape2)
library(ggplot2)
dat1 <- melt(dat,id.vars = c("experiment","method"))
p <- ggplot(dat1,aes(experiment,value,fill=variable))+geom_bar(stat="identity")+
facet_wrap(~method,nrow=1)
p
答案 1 :(得分:0)
使用ggplot2
包可以最好地探索这种多维图表。我将在此假设您粘贴的数据存储在data.frame d
:
require(reshape2) ## needed to have all experiments in one variable
require(ggplot2) ## needed for the great vizualizations
d <- melt(d, id.vars=c("experiment", "method"))
ggplot(d, aes(x=factor(experiment), y=value, fill=variable)) +
geom_bar(stat="identity") +
facet_wrap(~method)
您可以使用自定义标签进一步优化图表,但这在此处探索的时间太长。 ggplot2
标记的问题有很多很好的例子。
编辑:更正显示方法,已由@ user2743244
回答