2016-02-23 3 views
2

Я не могу получить нижнюю и верхнюю границу y.Показать верхнюю и нижнюю границы оси y

library(ggplot2) 
ggplot(data,aes(x=n,y=value,color=variable)) + geom_line()+ 
    labs(color="Legend")+ 
    scale_x_continuous("x",expand=c(0,0), 
        breaks=c(1,2,5,10,30,60))+ 
    scale_y_continuous("y",expand=c(0,0), 
         breaks=round(seq(0,max(data[,3]),by=0.1),1)) 

данных (там будет больше переменных позже):

n variable  value 
1  1 0.2339010 
2  1 0.2625115 
5  1 0.2781600 
10  1 0.2776770 
30  1 0.3344481 
60  1 0.4810225 
  1. Я хочу верхняя граница у будет наибольшее значение у (0,4810225) округляется до самой высокой секунды десятичной (0,5). Как показать «0,5» как максимальное значение y на графике? (Как и 60 - максимальное значение x.)

  2. Как показать y = 0.0 в начале оси?

enter image description here

ответ

0
last_plot() + 
scale_y_continuous(lim = c(0, 0.5), expand=c(0,0)) 

если вы хотите фиксированные значения, или

last_plot() + 
scale_y_continuous(breaks = function(x, ...) 
     sort(unique(c(range(x), pretty(x, ...)))), 
    expand=c(0,0)) 

если вы предпочитаете ggplot автоматически найти минимальное и максимальное значения ваших данных.

+0

Я не уверен, как правильно применить метод для автоматического определения максимального значения. Теперь он показывает 0,4810225 как верхнюю границу y и 0.2339010 в качестве нижней границы. – Joseph

+0

- это диапазон ваших данных. Вы можете объединить эти значения, но нет пуленепробиваемого способа гарантировать, что округление даст нужные вам значения (в этом случае 0 и 0,5), поэтому, если это сложное требование, вам может потребоваться явно указать эти значения. – baptiste

0

Установка пределов и округление максимальное значение, надеюсь, дает ожидаемое участок:

ggplot(data,aes(x=n,y=value,color=variable)) + geom_line()+ 
    labs(color="Legend")+ 
    scale_x_continuous("x", expand=c(0,0), 
        breaks=c(1,2,5,10,30,60)) + 
    scale_y_continuous("y",expand=c(0,0), 
        limits=c(0, round(max(data[,3]),1)), 
        breaks=seq(0,round(max(data[,3]),1),by=0.1)) 

enter image description here

+0

Проблема в том, что round(), по-видимому, не округляется до более высокого десятичного знака. Например, если максимальное значение будет 0,51, я бы хотел, чтобы оно округлялось до 0,6. Я придумал более простой способ решить эту проблему. – Joseph

+0

ОК, извините, не читал достаточно внимательно, подумал, что речь идет только об увеличении отметки оси. – beetroot

+0

Вы можете комбинировать с вашим ответом, хотя, я думаю: 'scale_y_continuous (" y ", expand = c (0,0), пределы = c (0, потолок (max (данные [, 3]) * 10)/10) , breaks = seq (0, потолок (max (данные [, 3]) * 10) /10,by=0.1)) ' – beetroot

0

Я придумал следующее, чтобы решить эту проблему.

lim <- ceiling(max(data[,3])*10)/10 

ylim <- c(0,lim) 
Смежные вопросы