在R中绘制data.frame

3

我是R语言新手,需要求助如何在R中绘制类似下面这样的数据框:

         V1          V2         V3          V4         
          1       Mazda     Toyota     Peugeot
   Car1.txt 0,507778837 0,19834711 0,146892655
   Car2.txt 0,908717802 0,64214047 0,396508728

我想在一个单独的图表中绘制这个数据框(实际上有7列和95行),其中v2、v3、v4分别用不同的颜色表示一条线,并命名为汽车名称,V1作为x轴标签,而y轴范围在[0,1]之间。
我真的不知道怎么做,所以非常感谢任何建议。

你看过R Introduction了吗?里面有关于图形的部分。但是首先检查导入数据部分,因为我觉得你的数据可能没有正确读入R。欢迎来到StackOverflow ;) - Marek
要开始,请查看R介绍手册第12章:http://cran.r-project.org/doc/manuals/R-intro.pdf - Andrie
3个回答

8
医生对Roman的数据框架进行了轻微修改。
library(ggplot2)
my.cars <- data.frame(
  Toyota = runif(50), 
  Mazda = runif(50), 
  Renault = runif(50),
  Car = paste("Car", 1:50, ".txt", sep = "")  
)

my.cars.melted <- melt(my.cars, id.vars = "Car")

他随后建议,看起来车辆变量是分类的,因此你的第一选择应该是条形图。

p_bar <- ggplot(my.cars.melted, aes(Car, value, fill = variable)) +
  geom_bar(position = "dodge")
p_bar

他接着指出对于95辆车来说,这可能会变得有些麻烦。也许点图更合适。
p_dot <- ggplot(my.cars.melted, aes(Car, value, col = variable)) +
  geom_point() +
  opts(axis.text.x = theme_text(angle = 90))
p_dot

由于这仍然有些难以获取有用信息,因此最好按平均值(无论价值是什么)对汽车进行排序。

my.cars.melted$Car <- with(my.cars.melted, reorder(Car, value))

(然后像以前一样重新绘制p_dot。)

最后,医生指出你可以使用以下方法绘制Roman推荐的线图:

p_lines <- ggplot(my.cars.melted, aes(as.numeric(Car), value, col = variable)) +
  geom_line()
p_lines

melt 需要 library(reshape) - fabb

5

这应该能帮助你入门。

my.cars <- data.frame(Toyota = runif(50), Mazda = runif(50), Renault = runif(50)) #make some fake data for this example
plot(x = 1:nrow(my.cars), y = my.cars$Toyota, type = "n") #make an empty plot
with(my.cars, lines(x = 1:nrow(my.cars), y = Toyota, col = "red")) #add lines for Toyota
with(my.cars, lines(x = 1:nrow(my.cars), y = Mazda, col = "red")) # add lines for Mazda
with(my.cars, lines(x = 1:nrow(my.cars), y = Renault, col = "navy blue")) # add lines for Renault

我使用了with(),这样你就不必每次调用列时都要键入my.cars$Toyotamy.cars$Mazda等。探索?par以获取可以传递给plot的更多参数。使用ggplot2解决方案的医生很快就会见到你。

0

数据框无法按照示例构建,因此我稍作修改:

tcars <- read.table(textConnection(" V1       Mazda     Toyota     Peugeot
    Car1.txt 0,507778837 0,19834711 0,146892655
    Car2.txt 0,908717802 0,64214047 0,396508728", header=TRUE, dec=",")
 # need to use dec arg with commas as decimal points!
 tcars
        V1     Mazda    Toyota   Peugeot
1 Car1.txt 0.5077788 0.1983471 0.1468927
2 Car2.txt 0.9087178 0.6421405 0.3965087

 matplot(data.matrix(tcars[-1]), type="b", xaxt="n")
 axis(1, labels=tcars[[1]],at=1:NROW(tcars))

生成的图表


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接