使用scale_x_discrete和scale_x_continuous自定义x轴刻度

时间:2016-03-09 23:59:13

标签: r ggplot2

我想让我在x轴上的刻度看起来像这样(但不需要破折号)

3(12) - 5(20) - 7(28) - 9(36) - 11(44) - 13(52)

原始图是

enter image description here

制作

  n.clusters mean.cluster mean.bucket   variable    value
1           3     21.64790    21.49858 sd.cluster 5.643380
2           5     21.63516    21.54975 sd.cluster 4.369756
3           7     21.55446    21.49889 sd.cluster 3.643280
4           9     21.59585    21.57022 sd.cluster 3.237870
5          11     21.63110    21.58452 sd.cluster 3.012060
6          13     21.55224    21.56104 sd.cluster 2.643777
7           3     21.64790    21.49858  sd.bucket 5.648886
8           5     21.63516    21.54975  sd.bucket 4.397690
9           7     21.55446    21.49889  sd.bucket 3.654752
10          9     21.59585    21.57022  sd.bucket 3.262954
11         11     21.63110    21.58452  sd.bucket 3.023834
12         13     21.55224    21.56104  sd.bucket 2.716441

ggplot(data, aes(n.clusters, value, shape=variable, group=variable)) + 
  geom_line(size = 1) +
  geom_point(size = 3.5) +
  scale_x_continuous(breaks = seq(1, 13, 2)) +
  scale_shape_discrete(solid=F,
                       name = "Variable",
                       breaks = c("sd.cluster", "sd.bucket"),
                       labels = c("sd.cluster", "sd.bucket")) +
  theme_bw() +
  theme(axis.text=element_text(size=16),
        axis.title=element_text(size=16,face="bold")) +
  labs(x = "Number of cluster",
       y = "Value")

如上所述,我对代码进行了一些更改  https://github.com/hadley/ggplot2/issues/501

Customizing x-axis of graph

并且最多得到了这些,但没有达到我想要的效果。

ggplot(data = mu.est.summary.long, aes(n.clusters, value, shape=variable, group=variable)) + 
  geom_line(size = 1) +
  geom_point(size = 3.5) +
  scale_x_discrete(breaks = c("3","5","7","9","11","13"),
                   labels = c("3(12)", "5(20)", "7(28)", "9(36)", "11(44)", "13(52)") +
  scale_shape_discrete(solid=F,
                       name = "Variable",
                       breaks = c("sd.cluster", "sd.bucket"),
                       labels = c("sd.cluster", "sd.bucket")) +
  theme_bw() +
  theme(axis.text=element_text(size=16),
        axis.title=element_text(size=16,face="bold")) +
  labs(x = "Number of cluster",
       y = "Value")

scale_x_discrete内: 既不使用limits=c(levels(n.clusters$data)也不breaks=c()也不使用breaks= seq()也不起作用。 R一直说缺少什么......我错过了什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

使用scale_x_discrete时,请确保x轴的变量不连续。如果使用数字标记x轴,则R将以连续方式读取它们,您需要指定as.factor(df$name)以使用离散轴。