简体   繁体   English

更改x轴刻度标签ggplot2不起作用,使轴消失,scale_x_discrete

[英]Changing x-axis tick labels ggplot2 not working, making axis disappear, scale_x_discrete

I'm trying to change the x-axis tick labels in ggplot but I can't get it to work for some reason. 我正在尝试更改ggplot中的x轴刻度标签,但由于某种原因我无法使其工作。 I have the following code and plot: 我有以下代码和情节:

ggplot(over36mo, aes(x=raceeth,y=pt,fill=factor(year.2cat))) +
  geom_bar(stat="identity",position="dodge") +
  geom_errorbar(aes(ymax=pt+se, ymin=pt-se), width=0.2, position=position_dodge(0.9)) +
  scale_fill_discrete(guide=FALSE) +
  scale_y_continuous(breaks=seq(0, 0.26, 0.02), limits=c(0,0.26)) +
labels=c("NHW","NHB","NHNA/PI","NHA","H")) +
  theme(axis.line.x=element_line(color="black"),
        axis.line.y=element_line(color="black"),
        panel.background=element_blank(),
        panel.border=element_blank(),
        panel.grid.major=element_blank(),
        panel.grid.minor=element_blank(),
        plot.background=element_blank()) +
xlab("All ages") + ylab("")

在此输入图像描述

But when I try to change 1, 2, 3, 4, 5 to different labels with scale_x_discrete , the x-axis disappears like so: 但是当我尝试用scale_x_discretescale_x_discrete为不同的标签时,x轴会像这样消失:

ggplot(over36mo, aes(x=raceeth,y=pt,fill=factor(year.2cat))) +
  geom_bar(stat="identity",position="dodge") +
  geom_errorbar(aes(ymax=pt+se, ymin=pt-se), width=0.2, position=position_dodge(0.9)) +
  scale_fill_discrete(guide=FALSE) +
  scale_y_continuous(breaks=seq(0, 0.26, 0.02), limits=c(0,0.26)) +
labels=c("NHW","NHB","NHNA/PI","NHA","H")) +
  theme(axis.line.x=element_line(color="black"),
    axis.line.y=element_line(color="black"),
    panel.background=element_blank(),
    panel.border=element_blank(),
    panel.grid.major=element_blank(),
    panel.grid.minor=element_blank(),
    plot.background=element_blank()) +
xlab("All ages") + ylab("") +
scale_x_discrete(breaks=c("1","2","3","4","5"), labels=c("NHW","NHB","NHNA/PI","NHA","H")) +

在此输入图像描述

It's probably obvious what's wrong but I can't figure it out. 这可能是显而易见的,但我无法弄明白。 Here's a dput of my data if someone wants to give it a shot! 如果有人想试一试,这是我的数据的输入!

dput(over36mo)

structure(list(z.surv.mos = c(36, 36, 36, 36, 36, 36, 36, 36, 
36, 36), raceeth = c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5), year.2cat = c(1, 
2, 1, 2, 1, 2, 1, 2, 1, 2), pt = c(0.10896243930756, 0.12919986395988, 
0.10763696166101, 0.0918969557367, 0.14186152615109, 0.12701814940611, 
0.05405405405405, 0.09393141727008, 0.08880901672474, 0.11716939090588
), nevent = c(9, 3, 0, 0, 2, 1, 0, 0, 1, 1), ncensor = c(0, 9, 
0, 1, 0, 2, 0, 1, 0, 0), nrisk = c(311, 96, 33, 9, 72, 21, 2, 
2, 48, 20), cum.ev = c(2474, 2469, 287, 342, 440, 496, 35, 40, 
505, 616), cum.cen = c(1, 958, 4, 107, 12, 198, 0, 13, 19, 239
), pointflg = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), pe = c(0.89103756069243, 
0.87080013604011, 0.89236303833898, 0.90810304426329, 0.8581384738489, 
0.87298185059388, 0.94594594594594, 0.90606858272991, 0.91119098327525, 
0.88283060909411), se = c(0.00591553159512, 0.00860912091676, 
0.01746946721576, 0.01975702415208, 0.01550071018085, 0.01904081251339, 
0.03717461110299, 0.05797150600236, 0.01228353765126, 0.01608823714602
), lower.cl = c(0.09796374785164, 0.11338170396883, 0.07830897003442, 
0.06029765195198, 0.11451353670001, 0.09468155080317, 0.01404207131432, 
0.02802051731609, 0.06772108402588, 0.08952365586359), upper.cl = c(0.12119598770184, 
0.14722485430136, 0.14794876641234, 0.1400560419898, 0.17574073058836, 
0.17039866945242, 0.20807761862723, 0.31488038035974, 0.11646360310182, 
0.15335238527538)), .Names = c("z.surv.mos", "raceeth", "year.2cat", 
"pt", "nevent", "ncensor", "nrisk", "cum.ev", "cum.cen", "pointflg", 
"pe", "se", "lower.cl", "upper.cl"), row.names = c("38", "134", 
"183", "246", "289", "366", "412", "452", "491", "563"), class = "data.frame")

It's because you are setting a discrete x scale but your x values are numeric. 这是因为您正在设置离散x刻度,但您的x值是数字。 If you want to treat them as discrete, convert to a factor. 如果要将它们视为离散,请转换为因子。 Just change the first part to 只需将第一部分更改为

ggplot(over36mo, aes(x=factor(raceeth), y=pt, fill=factor(year.2cat)))

and it should work just fine. 它应该工作得很好。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM