2015-02-26 18 views
5

Tôi có một vấn đề bằng cách sử dụng quy mô rời rạc trong ggplot2 trong R. Việc sử dụngSử dụng scale_x_discrete trong R ggplot2

g + scale_x_discrete(breaks=1:7, labels=1:7) 

sai thay đổi trong giới hạn của một âm mưu.

Trước:

before

Sau: enter image description here

Tôi không thể nhìn thấy bất cứ điều gì đáng ngờ về mã tôi sử dụng để tạo ra các hình ảnh, nhưng ở đây là nó:

g <- ggplot(data=plottingData, aes(x=x, y=y, ymin=ymin, ymax=ymax)) + 
geom_bar(stat="identity", fill=col) + 
geom_errorbar(width=0.5*binwidth, size=0.3) 

Và đây là dput() của đối tượng ggplot2 kết quả:

structure(list(data = structure(list(x = c(1, 2, 3, 4, 5, 6, 7), y = c(0.689655172413793, 0.689655172413793, 11.0344827586207, 2.75862068965517, 70.3448275862069, 13.7931034482759, 0.689655172413793), ymin = c(0, 0, 6.84765916431683, 0.870298113507349, 62.426550974053, 9.06894448064895, 0), ymax = c(4.26873021234759, 4.26873021234759, 17.3134146611865, 7.18339316166044, 77.1707644621886, 20.4612568616329, 4.26873021234759)), .Names = c("x", "y", "ymin", "ymax"), row.names = c(NA, -7L), class = "data.frame"), layers = list(<environment>, <environment>),  scales = <S4 object of class structure("Scales", package = "ggplot2")>,  mapping = structure(list(x = x, y = y, ymin = ymin, ymax = ymax), .Names = c("x",  "y", "ymin", "ymax"), class = "uneval"), theme = structure(list(  line = structure(list(colour = "black", size = 0.5, linetype = 1,    lineend = "butt"), .Names = c("colour", "size", "linetype",   "lineend"), class = c("element_line", "element")), rect = structure(list(   fill = "white", colour = "black", size = 0.5, linetype = 1), .Names = c("fill",   "colour", "size", "linetype"), class = c("element_rect",   "element")), text = structure(list(family = "", face = "plain",    colour = "black", size = 12, hjust = 0.5, vjust = 0.5,    angle = 0, lineheight = 0.9), .Names = c("family",   "face", "colour", "size", "hjust", "vjust", "angle",   "lineheight"), class = c("element_text", "element")),   axis.text = structure(list(family = NULL, face = NULL,    colour = NULL, size = structure(0.8, class = "rel"),    hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL), .Names = c("family",   "face", "colour", "size", "hjust", "vjust", "angle",   "lineheight"), class = c("element_text", "element")),   strip.text = structure(list(family = NULL, face = NULL,    colour = NULL, size = structure(0.8, class = "rel"),    hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL), .Names = c("family",   "face", "colour", "size", "hjust", "vjust", "angle",   "lineheight"), class = c("element_text", "element")),   axis.line = structure(list(), class = c("element_blank",   "element")), axis.text.x = structure(list(family = NULL,    face = NULL, colour = NULL, size = NULL, hjust = NULL,    vjust = 1, angle = NULL, lineheight = NULL), .Names = c("family",   "face", "colour", "size", "hjust", "vjust", "angle",   "lineheight"), class = c("element_text", "element")),   axis.text.y = structure(list(family = NULL, face = NULL,    colour = NULL, size = NULL, hjust = 1, vjust = NULL,    angle = NULL, lineheight = NULL), .Names = c("family",   "face", "colour", "size", "hjust", "vjust", "angle",   "lineheight"), class = c("element_text", "element")),   axis.ticks = structure(list(colour = "black", size = NULL,    linetype = NULL, lineend = NULL), .Names = c("colour",   "size", "linetype", "lineend"), class = c("element_line",   "element")), axis.title.x = structure(list(family = NULL,    face = NULL, colour = NULL, size = NULL, hjust = NULL,    vjust = NULL, angle = NULL, lineheight = NULL), .Names = c("family",   "face", "colour", "size", "hjust", "vjust", "angle",   "lineheight"), class = c("element_text", "element")),   axis.title.y = structure(list(family = NULL, face = NULL,    colour = NULL, size = NULL, hjust = NULL, vjust = NULL,    angle = 90, lineheight = NULL), .Names = c("family",   "face", "colour", "size", "hjust", "vjust", "angle",   "lineheight"), class = c("element_text", "element")),   axis.ticks.length = structure(0.15, unit = "cm", valid.unit = 1L, class = "unit"),   axis.ticks.margin = structure(0.1, unit = "cm", valid.unit = 1L, class = "unit"),   legend.background = structure(list(fill = NULL, colour = NA,    size = NULL, linetype = NULL), .Names = c("fill",   "colour", "size", "linetype"), class = c("element_rect",   "element")), legend.margin = structure(0.2, unit = "cm", valid.unit = 1L, class = "unit"),   legend.key = structure(list(fill = NULL, colour = "grey80",    size = NULL, linetype = NULL), .Names = c("fill",   "colour", "size", "linetype"), class = c("element_rect",   "element")), legend.key.size = structure(1.2, unit = "lines", valid.unit = 3L, class = "unit"),   legend.key.height = NULL, legend.key.width = NULL, legend.text = structure(list(   family = NULL, face = NULL, colour = NULL, size = structure(0.8, class = "rel"),    hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL), .Names = c("family",   "face", "colour", "size", "hjust", "vjust", "angle",   "lineheight"), class = c("element_text", "element")),   legend.text.align = NULL, legend.title = structure(list(   family = NULL, face = "bold", colour = NULL, size = structure(0.8, class = "rel"),    hjust = 0, vjust = NULL, angle = NULL, lineheight = NULL), .Names = c("family",   "face", "colour", "size", "hjust", "vjust", "angle",   "lineheight"), class = c("element_text", "element")),   legend.title.align = NULL, legend.position = "right",   legend.direction = NULL, legend.justification = "center",   legend.box = NULL, panel.background = structure(list(   fill = "white", colour = NA, size = NULL, linetype = NULL), .Names = c("fill",   "colour", "size", "linetype"), class = c("element_rect",   "element")), panel.border = structure(list(fill = NA,    colour = "grey50", size = NULL, linetype = NULL), .Names = c("fill",   "colour", "size", "linetype"), class = c("element_rect",   "element")), panel.grid.major = structure(list(colour = "grey90",    size = 0.2, linetype = NULL, lineend = NULL), .Names = c("colour",   "size", "linetype", "lineend"), class = c("element_line",   "element")), panel.grid.minor = structure(list(colour = "grey98",    size = 0.5, linetype = NULL, lineend = NULL), .Names = c("colour",   "size", "linetype", "lineend"), class = c("element_line",   "element")), panel.margin = structure(0.25, unit = "lines", valid.unit = 3L, class = "unit"),   panel.margin.x = NULL, panel.margin.y = NULL, strip.background = structure(list(   fill = "grey80", colour = "grey50", size = 0.2, linetype = NULL), .Names = c("fill",   "colour", "size", "linetype"), class = c("element_rect",   "element")), strip.text.x = structure(list(family = NULL,    face = NULL, colour = NULL, size = NULL, hjust = NULL,    vjust = NULL, angle = NULL, lineheight = NULL), .Names = c("family",   "face", "colour", "size", "hjust", "vjust", "angle",   "lineheight"), class = c("element_text", "element")),   strip.text.y = structure(list(family = NULL, face = NULL,    colour = NULL, size = NULL, hjust = NULL, vjust = NULL,    angle = -90, lineheight = NULL), .Names = c("family",   "face", "colour", "size", "hjust", "vjust", "angle",   "lineheight"), class = c("element_text", "element")),   plot.background = structure(list(fill = NULL, colour = "white",    size = NULL, linetype = NULL), .Names = c("fill",   "colour", "size", "linetype"), class = c("element_rect",   "element")), plot.title = structure(list(family = NULL,    face = NULL, colour = NULL, size = structure(1.2, class = "rel"),    hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL), .Names = c("family",   "face", "colour", "size", "hjust", "vjust", "angle",   "lineheight"), class = c("element_text", "element")),   plot.margin = structure(c(1, 1, 0.5, 0.5), unit = "lines", valid.unit = 3L, class = "unit")), .Names = c("line",  "rect", "text", "axis.text", "strip.text", "axis.line", "axis.text.x",  "axis.text.y", "axis.ticks", "axis.title.x", "axis.title.y",  "axis.ticks.length", "axis.ticks.margin", "legend.background",  "legend.margin", "legend.key", "legend.key.size", "legend.key.height",  "legend.key.width", "legend.text", "legend.text.align", "legend.title",  "legend.title.align", "legend.position", "legend.direction",  "legend.justification", "legend.box", "panel.background",  "panel.border", "panel.grid.major", "panel.grid.minor", "panel.margin",  "panel.margin.x", "panel.margin.y", "strip.background", "strip.text.x",  "strip.text.y", "plot.background", "plot.title", "plot.margin" ), class = c("theme", "gg"), complete = TRUE), coordinates = structure(list(  limits = structure(list(x = NULL, y = NULL), .Names = c("x",   "y"))), .Names = "limits", class = c("cartesian", "coord" )), facet = structure(list(shrink = TRUE), .Names = "shrink", class = c("null",  "facet")), plot_env = <environment>, labels = structure(list(  x = "x", y = "y", ymin = "ymin", ymax = "ymax"), .Names = c("x",  "y", "ymin", "ymax"))), .Names = c("data", "layers", "scales", "mapping", "theme", "coordinates", "facet", "plot_env", "labels"), class = c("gg", "ggplot")) 

Đáng chú ý, tham số mở rộng chỉ điều chỉnh ô một chút và expand=c(0,0) không giải quyết được sự cố. Chỉ định giới hạn không giải quyết được vấn đề, nhưng cũng loại bỏ các nhãn trục vì một số lý do.

Mọi trợ giúp sẽ được đánh giá cao.

+2

Bạn có thể tải lên 'dput' một lần nữa không? Tôi đã nhận được thông báo lỗi. Dường như với tôi rằng bạn có dput cho một đối tượng ggplot. Bạn có thể tải lên dữ liệu của bạn? – jazzurro

+0

@jazzurro: Vâng, đây là đối tượng ggplot2 - tôi nghĩ rằng việc này dễ dàng hơn khi làm việc thay vì phải đưa ra âm mưuData (thực tế có chứa một số nội dung không liên quan) cũng như col và binwidth. câu trả lời của bóng dưới đây giải quyết vấn đề cho tôi. –

Trả lời

9

Điều đó có thể đã xảy ra khi bạn thêm g + scale_x_discrete(). Điều này xảy ra khi sử dụng một quy mô rời rạc cho dữ liệu liên tục. Không nghỉ giải lao, bạn có thể thấy giới hạn sai và chỉ thay đổi chúng.

g + scale_x_discrete() 
g + scale_x_discrete(limits=1:7) 
g + scale_x_discrete(limits=1:7, labels = letters[1:7]) 

Hoặc, bạn có thể sử dụng factor để nhận giới hạn thích hợp ngay từ đầu. Tất nhiên bạn sẽ phải đổi tên trục.

ggplot(data=plottingData, aes(x=factor(x), y=y, ymin=ymin, ymax=ymax)) + 
    geom_bar(stat="identity", fill=col) + 
    geom_errorbar(width=0.5*binwidth, size=0.3) + 
    scale_x_discrete(name = 'x') 
Các vấn đề liên quan