我有一个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 - 当我绘制面部的顺序时,由值'data'定义。 SNR = 10的字符串位于SNR = 2的字符串之前。我想在SNR = 10
之前获得SNR = 2的数据2-我希望每个方面都有不同的比例。 (现在每个方面都从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代码。我已经尝试过秤包但我不明白如何在我的情况下使用它。
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))
答案 0 :(得分:1)
要操纵构面的顺序,您需要根据需要对正在面对的因子的级别进行排序。所以你需要订购data
的等级。这可以像df$data <- factor(df$data, levels = c(...))
一样完成(在c()
中包含您所需的级别顺序)。
关于第二个问题,请查看?facet_wrap
,尤其是scales
选项。您必须设置scales = 'free'
或'free_y'
。
要在轴上仅包含整数值,请尝试使用包scales
以及labels
中的参数scale_y_continuous()
。您可以使用包附带的预定义格式之一,也可以定义自己的格式,例如
intfmt <- function(x) format(x, digits = 0)
只会打印数字的整数部分。指定后,您只需在ggplot
电话
+ scale_y_continuous(labels = intfmt)