2015-05-26 3 views
4

Я хочу настроить зазор (разрывы) по оси y графика. Я попробовал два варианта.R: ggplot set ylim с пользовательским разрывом

option1: ylim(0.0,0.6) 
option2: scale_y_continuous(breaks=seq(0.0, 0.6, 0.1)) 

Проблема с опцией 1 заключается в том, что она разрывается каждые 0,2 до предела оси y, которая равна 0,6. Example of problem1 Проблема с опцией2 заключается в том, что она дает эту иллюзию резкой разницы между графиками, поскольку она увеличивает 0,1 сегмент графика.

Я хочу, чтобы ось y была разбита на каждые 0,1 или настраивала ее на любой разрыв, показывая максимальный предел y-axix (в данном случае от 0.0 до 0.6, но прерывайте каждые 0,1).

xVal = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) 
a = c(0.18340368127959822, 0.17496531617798133, 0.16772886654445848, 0.15934821062512169, 0.15390913489444036, 0.14578798884106348, 0.14524174121702108, 0.13958093302847951, 0.1365009715515553, 0.13337340345559975, 0.12995175856952607, 0.12583603207983862, 0.12180656145228715, 0.11824179486798418, 0.11524630600365712) 
b = c(0.13544353787855531, 0.11345498050033079, 0.11449834060237293, 0.10479213576778054, 0.09677430524414686, 0.091990671548439179, 0.089965934807318487, 0.088711600335474206, 0.088923403079789909, 0.087989321310275717, 0.085424600757017272, 0.08251334730889931, 0.080178280060313953, 0.077717041621392688, 0.076638743116633837) 
c = c(0.087351324973658093, 0.12113308515702567, 0.11422800742900453, 0.11264309199970789, 0.11390287790920843, 0.10774426268894192, 0.10587704437111881, 0.10474954948318291, 0.10568277685778472, 0.10201545270338952, 0.09939827283775747, 0.098062403381144761, 0.094110034623398231, 0.091211408116407641, 0.089369778116029489) 

library(ggplot2) 
library(reshape2) 

df = data.frame(xVal, a, b, c) 
df.melt = melt(df, id="xVal") 

задачи1:

ggplot(data=df.melt, aes(x=xVal, y=value, colour=variable)) + 
      geom_point() + 
      geom_line() + 
      xlab("xVal") + ylab("YValues") + xlim(1,16) + 
      ylim(0.0,0.6) 

задачи2:

ggplot(data=df.melt, aes(x=xVal, y=value, colour=variable)) + 
      geom_point() + 
      geom_line() + 
      xlab("xVal") + ylab("YValues") + xlim(1,16) + 
      scale_y_continuous(breaks=seq(0.0, 0.6, 0.1)) 

Как настроить ось ординат таким образом, что разрыв в соответствии со значением, что указываю.

+0

Вы также хотите 'limits' аргумент в опции 2 – user20650

+0

Да, добавить' + ylim (0, 0,6) 'или параметр 'limits = c (0, .6)' к вашему масштабу. – lukeA

ответ

4

См. Ниже. Вам нужно установить как разрывы, так и пределы. В противном случае вам может не понравиться выбранный перерыв или он может увеличить данные и не показывать некоторые из ваших перерывов.

library(ggplot2) 
library(reshape2) 

xVal = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) 
a = c(0.18340368127959822, 0.17496531617798133, 0.16772886654445848, 0.15934821062512169, 0.15390913489444036, 0.14578798884106348, 0.14524174121702108, 0.13958093302847951, 0.1365009715515553, 0.13337340345559975, 0.12995175856952607, 0.12583603207983862, 0.12180656145228715, 0.11824179486798418, 0.11524630600365712) 
b = c(0.13544353787855531, 0.11345498050033079, 0.11449834060237293, 0.10479213576778054, 0.09677430524414686, 0.091990671548439179, 0.089965934807318487, 0.088711600335474206, 0.088923403079789909, 0.087989321310275717, 0.085424600757017272, 0.08251334730889931, 0.080178280060313953, 0.077717041621392688, 0.076638743116633837) 
c = c(0.087351324973658093, 0.12113308515702567, 0.11422800742900453, 0.11264309199970789, 0.11390287790920843, 0.10774426268894192, 0.10587704437111881, 0.10474954948318291, 0.10568277685778472, 0.10201545270338952, 0.09939827283775747, 0.098062403381144761, 0.094110034623398231, 0.091211408116407641, 0.089369778116029489) 

df = data.frame(xVal, a, b, c) 
df.melt = melt(df, id="xVal") 

ggplot(data=df.melt, 
    aes(x=xVal, y=value, colour=variable)) + geom_point() + 
    geom_line() + xlab("xVal") + ylab("YValues") + xlim(1,16) + scale_y_continuous(breaks=seq(0.0, 0.6, 0.1), limits=c(0, 0.6)) 
+0

Спасибо за ответ, а также за уборку опечаток –

2

Это еще одно решение, особенно если вы хотите использовать пользовательские лимиты. Из документации scale_y_continuous: breaks может быть «Функция, которая принимает ограничения в качестве входных и возвращает breaks как output».

Так что, если вы установите пределы, вы можете просто добавить:

custom_lims = c(0, 0.6) 
... + scale_y_continuous(breaks=function(lims) {seq(lims[1], lims[2], 0.1)}, limits = custom_lims)