【发布时间】:2014-07-12 16:10:01
【问题描述】:
我有一个 data.frame
> head(df,30)
method FP TP data
1 HF 0 1 A p=10000 n=200 SNR=0.5
2 HM 15 2 A p=10000 n=200 SNR=0.5
3 HMP80 7 2 A p=10000 n=200 SNR=0.5
4 HMP90 2 2 A p=10000 n=200 SNR=0.5
5 LCV 0 2 A p=10000 n=200 SNR=0.5
6 LKSC 0 1 A p=10000 n=200 SNR=0.5
7 LP70 0 1 A p=10000 n=200 SNR=0.5
8 LP85 0 1 A p=10000 n=200 SNR=0.5
9 SS0206 0 0 A p=10000 n=200 SNR=0.5
10 SS0208 0 0 A p=10000 n=200 SNR=0.5
11 SS0406 0 0 A p=10000 n=200 SNR=0.5
12 SS0408 0 0 A p=10000 n=200 SNR=0.5
13 SS0506 0 0 A p=10000 n=200 SNR=0.5
14 SS0508 0 0 A p=10000 n=200 SNR=0.5
15 HF 26 7 A p=10000 n=200 SNR=2
16 HM 137 9 A p=10000 n=200 SNR=2
17 HMP80 136 9 A p=10000 n=200 SNR=2
18 HMP90 64 8 A p=10000 n=200 SNR=2
19 LCV 67 8 A p=10000 n=200 SNR=2
20 LKSC 0 3 A p=10000 n=200 SNR=2
21 LP70 67 8 A p=10000 n=200 SNR=2
22 LP85 51 8 A p=10000 n=200 SNR=2
23 SS0206 0 2 A p=10000 n=200 SNR=2
24 SS0208 0 0 A p=10000 n=200 SNR=2
25 SS0406 0 0 A p=10000 n=200 SNR=2
26 SS0408 0 0 A p=10000 n=200 SNR=2
27 SS0506 0 0 A p=10000 n=200 SNR=2
28 SS0508 0 0 A p=10000 n=200 SNR=2
29 HF 66 16 A p=10000 n=200 SNR=10
30 HM 292 16 A p=10000 n=200 SNR=10
我正在用 ggplot2 进行绘图
d = melt(df, id=c("method", "data"))
ggplot() + geom_bar(data=d, aes(x=method, y=value, fill=variable), stat='identity', position='dodge', width=0.5) +
facet_wrap(~data, ncol=3) +
theme_bw() + xlab("Method") + ylab("") +
theme(axis.title.x = element_text(face="bold", colour="#990000", size=20),
axis.text.x = element_text(angle=90, vjust=0.5, size=20),
axis.text.y = element_text(angle=0, vjust=0.5, size=20),
legend.text = element_text(colour = 'black', angle = 0, size = 20),
legend.title = element_text(colour = 'white', angle = 0, size = 20, hjust = 0, vjust = 0))
有两点我想改变:
1 - 当我绘制时,面的顺序由值“数据”定义。 SNR=10 的字符串位于 SNR=2 的字符串之前。我想在 SNR=10 之前获得 SNR=2 的数据
2- 我希望每个方面都有不同的比例。 (现在在每个方面 y 从 0 到几乎 300。)
我该如何更改?
编辑:
我找到了第一个问题的解决方案
u = unique(df$data)
levels(u) = u
d$data = factor(df$data, levels=levels(u))
关于第二个问题,我使用的是选项
facet_wrap(~data, ncol=3, scales = 'free_y')
但问题是我只想要轴上的整数值。
我试过scale_y_discrete(),但在这种情况下,在某些方面绘制了太多的值。
我该如何解决这个问题?
编辑:
这是我当前的 R 代码。我已经尝试过 scales 包,但我不明白如何在我的情况下使用它。
df = read.csv(file = "Desktop/n200_p10000.csv")
df$method.1 = NULL
df$score = NULL
df$FN = NULL
df$TN = NULL
d = melt(df, id=c("method", "data"))
u = unique(df$data)
levels(u) = u
d$data = factor(df$data, levels=levels(u))
ggplot() + geom_bar(data=d, aes(x=method, y=value, fill=variable), stat='identity', position='dodge', width=0.5) +
facet_wrap(~data, ncol=3, scales = 'free_y') +
scale_y_continuous() +
theme_bw() + xlab("Method") + ylab("") +
theme(axis.title.x = element_text(face="bold", colour="#990000", size=20),
axis.text.x = element_text(angle=90, vjust=0.5, size=20),
axis.text.y = element_text(angle=0, vjust=0.5, size=20),
legend.text = element_text(colour = 'black', angle = 0, size = 20),
legend.title = element_text(colour = 'white', angle = 0, size = 20, hjust = 0, vjust = 0))
【问题讨论】: