相对较新,卡在饼图上

时间:2018-10-29 20:26:14

标签: r graphics

我制作了一个名为pie_chart.csv的.csv文件。我一直在尝试为其中的每个样本制作一个饼图,其他列是饼图显示的类别。到目前为止,我目前有以下内容:

#Pie Chart
library(readr)
x <- read_csv("pie_chart.csv")

#rename the first column
colnames(x)[colnames(x)=="X1"] <- "Sample"

我对如何从这里继续感到困惑。我已经尝试过for循环,但希望能给予您任何帮助!谢谢!

我转置了数据并尝试使用for循环。在另一个数据集中,此方法有效,但是,对于该数据,却给了我错误:

x <- t(x)
names2 <- colnames(x[,2])[colnames(x) != "Sample"]
for (i in 2:col) { 
  mypath2 <- file.path("C:","Users", "Prak Lab", "Desktop","REPORTS", "text files", 
                       paste(names2[i],"pie", ".jpg", sep = ""))
  jpeg(file = mypath2)
  pie(table(x[,i]), labels = x[,1], col = c("darkred","pink"), main = colnames(x[i]))
  #title = colnames(x[i])
  dev.off()  
}

这是头(x):

  Sample           Reads_used_in_Clonotypes   Unsuccessful_Reads   Not_used_for_Clonotypes
1 012-915-8-rep1                      0.772               0.1540                    0.0743
2 012-915-8-rep2                      0.888               0.0436                    0.0681
3 012-915-8-rep3                      0.856               0.0470                    0.0966
4 012-915-8-rep4                      0.873               0.0525                    0.0741
5 012-915-8-rep5                      0.860               0.0440                    0.0962
6 012-915-8-rep6                      0.905               0.0286                    0.0667

2 个答案:

答案 0 :(得分:0)

我想你的意思是这样的:

enter image description here

这是生成绘图的代码。我加载了ggplot2,reshape和dplyr等几个软件包,因为它们使事情变得更加方便。

# Your code (slightly modified, using read.csv instead)
x <- read.csv("pie_chart.csv")
colnames(x)[colnames(x)=="X"] <- "Sample"

# My code starts here:
library(ggplot2)
library(reshape)
library(dplyr)

# Rearrange the data to make it easier for plotting
x2 <- melt(x, id.vars = "Sample") %>% arrange(Sample, variable)

# Open an empty png file; alternatively you can use pdf("Sample.pdf",....)
png("Sample.png", width = 1600, height = 1600)
# Plot the graph. I changed the theme a little bit but feel free to change any of it
ggplot(x2, aes(x= "", y = value, fill = variable))+ geom_bar(width = 1, stat = "identity") + 
  coord_polar("y", start=0) + 
  theme(axis.text.x=element_blank(),
        axis.title.x = element_blank(),
        axis.title.y = element_blank(),
        panel.border = element_blank(),
        panel.grid=element_blank(),
        axis.ticks = element_blank(),
  ) +
  facet_wrap(~Sample)
# Save the png file
dev.off()

祝你好运!如果您还有其他问题,请告诉我。对于使用ggplot2的饼图,我发现此link非常有用。

答案 1 :(得分:0)

首先:当您使用t(x)转置数据时,您正在将所有内容转换为character。这是因为t返回matrix,而不是data.frame。矩阵中的所有内容都必须属于同一类,因此可以找到一个通用类并完成转换:character > numeric > integer > logical(或小于您的选择),如果有一个字符(或{{1} })列,然后一切都将转换。

如果您确实希望每行一张图片,那么类似的事情可能会起作用。

首先,一些数据:

factor

和循环。我已将jpeg / dev.off代码注释掉,以进行本地演示。我还添加了一种颜色(x <- read.csv(header=TRUE, check.names=FALSE, text = " ,Reads used in Clonotypes,Unsuccessful Reads,Not used for Clonotypes 012-915-8-rep1,0.772143599,0.153575355,0.074281045 012-915-8-rep2,0.888258155,0.043600206,0.068141639 012-915-8-rep3,0.856428962,0.046993738,0.0965773 012-915-8-rep4,0.873364731,0.05249563,0.074139639") colnames(x)[1] <- "Sample" 表示没有颜色),因为我推断您希望饼图中显示所有三列。如果我不正确,请进行调整。

NA

第一个图表是:

first pie chart

您可能会注意到,如果纵横比和for (i in seq_len(nrow(x))) { fn <- paste0(x$Sample[i], ".jpg") # jpeg(file = fn) pie(unlist(x[i,-1]), col = c(NA, "darkred", "pink"), main = x$Sample[i]) legend("bottomleft", sprintf("%0.1f%% - %s", 100*x[i,-1], names(x[i,-1])), bty='n') # dev.off() } radius=的参数)管理不当,标签将不在页面上播放。

图例很难保持在界限之内……与饼图本身的重叠说明了这一点。

最后,我将引用该函数的帮助文档(?pie),这是我在犹豫要首先提供此答案的原因:

pie