2015-06-22 84 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))