2016-02-17 2 views
2

У меня есть небольшая проблема, которую я могу смешно не решить самостоятельно.ggplot2 geom_smooth с переменным как фактор

У меня есть простой фрейм данных, который я хочу построить с помощью ggplot2. Когда я использую переменную вес как фактор, я получаю все значения по оси x, с. plot 2, но не тогда, когда я использую его как целое, s. участок 1. Тем не менее, я хочу использовать geom_smooth, который, как представляется, функционирует только с участок 1, но не в участок 2 где вес - фактор.

Как получить график в ggplot2, который показывает мне все значения веса и дополнительно функции geom_smooth?

Рассмотрим this пример файла:

require(ggplot2) 

x <- get.url(https://dl.dropboxusercontent.com/u/109495328/example.csv) 
app_df <- read.csv(x, header=T, sep = ",", quote = "", stringsAsFactors = FALSE, na.strings = "..")  
colnames(app_df) <- c("Date", "Weight") 

date <- as.Date(strptime(app_df$Date, "%d.%m.%Y")) 
weight <- app_df$Weight 
df <- na.omit(data.frame(date,weight)) 

# plot 1 (only few values indicated in x axis) 
ggplot(df, aes(date,weight)) + 
    geom_point() + 
    geom_line(aes(group = "1")) + 
    geom_smooth(method = "lm") 

# plot 2 (no smooth function) 
ggplot(df, aes(date,as.factor(weight))) + 
    geom_point() + 
    geom_line(aes(group = "1")) + 
    geom_smooth(method = "lm") 
+1

Непонятно, в чем проблема. На графике 1 вы получаете 16 точек данных и линию тренда ('geom_smooth'). Также на графике 2 вы получаете 16 очков, но этот график неверен, потому что вес должен использоваться как целое, а не фактор. –

+1

Факторные переменные по существу являются категориальными переменными. Вы не можете приспособить к ним линейную или любую функцию. Что касается целых значений, которые не все отображаются, вы можете использовать 'scale_y_continuous' для настройки пределов и разрывов. – Gopala

+0

Привет, Гопала, как бы вы использовали «scale_y_continous» в настоящем примере, чтобы получить те же 16 точек данных по оси x, что и на рисунке 2? –

ответ

1

Это то, что вы после этого?

require(ggplot2) 

x <- url("https://dl.dropboxusercontent.com/u/109495328/example.csv") 
app_df <- read.csv(x, header=T, sep = ",", quote = "", stringsAsFactors = FALSE, na.strings = "..")  
colnames(app_df) <- c("Date", "Weight") 

date <- as.Date(strptime(app_df$Date, "%d.%m.%Y")) 
weight <- app_df$Weight 
df <- na.omit(data.frame(date,weight)) 

# plot 1 (only few values indicated in x axis) 
ggplot(df, aes(date,weight)) + 
    geom_point() + 
    geom_line(aes(group = "1")) + 
    geom_smooth(method = "lm") 

# plot 2 (no smooth function) 
ggplot(df, aes(date,as.numeric(as.factor(weight)))) + 
    geom_point() + 
    geom_line(aes(group = "1")) + 
    geom_smooth(method = "lm") 
+0

Richo64, большое спасибо за ваш ответ. К сожалению, это не то, что я хотел. Я хочу иметь комбинацию графиков 1 и 2, где у меня есть линия тренда со всеми 16 точками данных, указанными на оси х, как на рисунке 2. –

+0

Имеет ли [этот ответ] (http://stackoverflow.com/questions/35262341/r-ggplot2-change-x-axis-values-to-non-log-values ​​/ 35263049 # 35263049) help? – Mist

Смежные вопросы