2015-06-22 85 views
4

ggplot2中是否有等價物來繪製這個數據集?我使用matplot,並讀取qplot可以使用,但它確實不起作用。 ggplot/matplotmatplot的ggplot等效

data<-rbind(c(6,16,25), c(1,4,7), c(NA, 1,2), c(NA, NA, 1)) 
as.data.frame(data) 
matplot(data, log="y",type='b', pch=1) 

plot columns/each line

+0

出於好奇,什麼是'as.data.frame(數據)的目的,'在你上面的代碼? – 2015-06-22 10:12:35

+0

我犯了一個錯誤!對不起,我刪除了我的評論(我以爲你是在問數據!)我把'as.data.frame(data)'因爲它似乎不能只用矩陣工作,但可能它不是有用的 – catindri

+0

matplot *是*對於矩陣(和向量,請參閱?matplot)。問題在於你沒有將'as.data.frame(data)'中的調用分配給任何變量(尤其是'data')。所以如果你在你的代碼中這樣做,它實際上什麼都不做。由於其他原因稍後消失,可能還沒有工作。 – ddiez

回答

7

您可以創建在ggplot類似的情節,但你需要首先做一些數據整形。

library(reshape2) 

#ggplot needs a dataframe 
data <- as.data.frame(data) 
#id variable for position in matrix 
data$id <- 1:nrow(data) 
#reshape to long format 
plot_data <- melt(data,id.var="id") 


#plot 
ggplot(plot_data, aes(x=id,y=value,group=variable,colour=variable)) + 
    geom_point()+ 
    geom_line(aes(lty=variable)) + 
    scale_y_log10(breaks=c(1,2,5,10,25)) 

我的輸出: enter image description here

+0

最終我選擇了這個解決方案,因爲我無法更改第一個解決方案「autoplot」的值的名稱和名稱 – catindri

+0

謝謝。不要打敗我自己的鼓,但請將問題標記爲已解決,以便其他人不必花時間在它上面:通過單擊表決按鈕下方的綠色複選標記選擇最合適的答案。 – Heroka

9

嘗試autoplot.zoo。 (續下面圖)

library(ggplot2) 
library(zoo) 

autoplot(zoo(data), facet = NULL) + geom_point() 

,並提供:

screenshot

注意,如果data有列名的時候,傳說會使用它們。另外如果想要不同的線路類型,請附加+ aes(linetype = Series)。如果需要log10 y軸,則附加+ scale_y_log10()

+0

謝謝這是工作得很好,只是一個小規模校正關於規模:你必須添加'scale_y_log10()' – catindri

+0

是的,已修復。 –

1

你也可以不用外部包,如果你想:

data <- rbind(c(6,16,25), c(1,4,7), c(NA, 1,2), c(NA, NA, 1)) 

# set some names (not necessary- helps understand the code): 
rownames(data) <- 1:4 
colnames(data) <- LETTERS[1:3] 
data 
    A B C 
1 6 16 25 
2 1 4 7 
3 NA 1 2 
4 NA NA 1 

# convert to data.frame: 
d <- as.data.frame.table(data) 
d 

    Var1 Var2 Freq 
1  1 A 6 
2  2 A 1 
3  3 A NA 
4  4 A NA 
5  1 B 16 
6  2 B 4 
7  3 B 1 
8  4 B NA 
9  1 C 25 
10 2 C 7 
11 3 C 2 
12 4 C 1 

ggplot(d, aes(x = Var1, y = Freq, group = Var2, colour = Var2)) + 
    geom_point() + 
    geom_line(aes(lty = Var2)) + 
    scale_y_log10(breaks = c(1,2,5,10,25))