Относительно плохо знаком с R, застрял на Piechart - PullRequest
0 голосов
/ 29 октября 2018

Я сделал этот CSV-файл с именем pie_chart.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()  
}

Это голова (х):

  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 голосов
/ 30 октября 2018

Первое: когда вы перемещаете данные с помощью t(x), вы конвертируете все в character. Это потому, что t возвращает matrix, а не data.frame. Все в матрице должно быть одного и того же класса, поэтому найден общий класс и выполнены преобразования: character > numeric > integer > logical (или меньше, по вашему выбору), где, если есть один символ (или factor) столбец, тогда все преобразуется.

Если вы действительно хотите одно изображение для каждой строки, то что-то вроде этого может сработать.

Сначала некоторые данные:

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"

И петля. Я закомментировал код jpeg / dev.off для локальной демонстрации. Я также добавил цвет (NA без цвета), так как я предполагаю, что вы хотели, чтобы все три столбца были показаны на круговой диаграмме. Отрегулируйте, если я ошибаюсь.

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()
}

Первый график:

first pie chart

Скорее всего, вы заметите, что ваши ярлыки сойдут со страницы, если соотношение сторон и radius= (аргумент для pie) не будут правильно обработаны, поиграйте с ним.

Легенда сложнее удержаться в границах ... как показывает совпадение с самой круговой диаграммой.

Наконец, я процитирую из справочной документации по этой функции (?pie) причину, по которой я сначала не решался дать этот ответ:

 Pie charts are a very bad way of displaying information.  The eye
 is good at judging linear measures and bad at judging relative
 areas.  A bar chart or dot chart is a preferable way of displaying
 this type of data.

 Cleveland (1985), page 264: "Data that can be shown by pie charts
 always can be shown by a dot chart.  This means that judgements of
 position along a common scale can be made instead of the less
 accurate angle judgements."  This statement is based on the
 empirical investigations of Cleveland and McGill as well as
 investigations by perceptual psychologists.
0 голосов
/ 30 октября 2018

Полагаю, вы имеете в виду что-то вроде этого:

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 я нашел эту ссылку довольно полезной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...