2016-03-04 3 views
1
dataframe:- df 

    Period  v1  v2 
1 2002  1  1 
2 2003  5  12 
3 2004  9  28 
4 2005  16  66 
5 2006  23  115 

Code:- 

ggplot() + geom_line(data=df, aes(x=Period, y=v1, group=1, color="v1")) + 
geom_line(data=df, aes(x=Period, y=v2, group=1, color="v2"))+ theme(legend.title=element_blank()) + scale_y_continuous(name="Count") + 
geom_point(data=df, aes(x=Period, y=v1, group=1)) + geom_point(data=df, aes(x=Period, y=v2, group=1)) 

Я черчение два графика линии вместе с points.The вопросом я переживаю, что значения увеличиваются в разной величине и поэтому один из линии графов «v1» получает конденсируются на нижний конец шкалы и, следовательно, более трудно читать. может ли кто-нибудь обратиться за советом к решению этого? Также можно сократить этот код?ggplot с два Y осями

+3

Ggplot не поддерживает два у оси, потому что делает отображение эстетики к шкалам неоднозначным (и это считается плохой практикой) –

ответ

1

Идея с ggplot2 является то, что вы преобразовать данные в так называемом длинном формате, где каждое наблюдение занимает одну строку:

library(tidyr) 
plot_data <- gather(df, key, value, -Period) 
head(plot_data) 
## Period key value 
## 1 2002 v1  1 
## 2 2003 v1  5 
## 3 2004 v1  9 
## 4 2005 v1 16 
## 5 2006 v1 23 
## 6 2002 v2  1 

Теперь вы можете отобразить переменную value в y и key окрашивать в получить тот же участок проще:

ggplot() + geom_line(data=plot_data, aes(x=Period, y=value, colour = key)) + 
    theme(legend.title=element_blank()) + 
    geom_point(data=plot_data, aes(x=Period, y=value)) + 
    scale_y_continuous(name="Count") 

Я не уверен, что именно вы имеете в виду, когда данные становятся все труднее читать. Может быть, вам нужна логарифмическая ось y?

ggplot() + geom_line(data=plot_data, aes(x=Period, y=value, colour = key)) + 
    theme(legend.title=element_blank()) + 
    geom_point(data=plot_data, aes(x=Period, y=value)) + 
    scale_y_log10(name="Count") 

enter image description here

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