bar_plot с упорядоченными элементами не создает упорядоченный график [duplicate]

Я делаю что-то похожее на @Ethan, которое я видел в источнике Django, где основное отличие - «############» блокировать комментарии, чтобы разграничить области. Например,

class SomeClass(object):
    #################
    # Magic Methods #
    #################
    def __magic_methods__(self):
        "magic methods first"

    ##################
    # Public Methods #
    ##################
    def a_method(self):
        "then normal methods, in order of importance"

    ###################
    # Private Methods #
    ###################
    def _private_method(self):
        "then worker methods, grouped by importance or related function"

Очевидно, что это менее полезно для небольших классов.

55
задан Gregor 22 July 2016 в 17:06
поделиться

2 ответа

Трудно ответить на ваш конкретный вопрос без полного, воспроизводимого примера. Однако что-то вроде этого должно работать:

#Turn your 'treatment' column into a character vector
data$Treatment <- as.character(data$Treatment)
#Then turn it back into a factor with the levels in the correct order
data$Treatment <- factor(data$Treatment, levels=unique(data$Treatment))

В этом примере порядок фактора будет таким же, как в файле data.csv.

Если вы предпочитаете другое закажите, вы можете заказать их вручную:

data$Treatment <- factor(data$Treatment, levels=c("Y", "X", "Z"))

Однако это опасно, если у вас много уровней: если вы ошиблись в любом из них, это вызовет проблемы.

90
ответ дан Gregor 17 August 2018 в 17:27
поделиться
  • 1
    О, МОЙ БОГ! Я понял! Большое спасибо, это было именно то, что мне нужно! :) Вы просто сделали мой день. – Lisa Ta 9 October 2012 в 03:13
  • 2
    Подумайте, почему это даже необходимо. Почему топоры переупорядочиваются ggplot в первую очередь? Кажется опасным, если кто-то не знает, что это произойдет. – Dirk Calloway 25 March 2014 в 12:27
  • 3
    Я просто столкнулся с этой проблемой, создав heatmap с qplot и автоматически применяя имена переменных. Должно ли быть сообщено? – bright-star 25 March 2014 в 12:29
  • 4
    @DirkCalloway, это поведение имеет смысл, если вы думаете о том, как факторы работают в R. Фактор - это вектор целых чисел, каждый из которых связан с символьной меткой. Когда вы создаете коэффициент, читая столбец значений символов в текстовом файле (например, .csv), R присваивает целочисленные значения в алфавитном порядке, а не в том порядке, в котором они отображаются в файле. Вы можете спорить, имеет ли это смысл, но ggplot2 затем делает логическую вещь, которая должна отображать уровни факторов в порядке их целочисленных значений. Ваша жалоба с read.table, а не ggplot2. – Drew Steen 25 March 2014 в 16:06
  • 5
    @DrewSteen Правда, я думаю, это имеет смысл с этой точки зрения. – Dirk Calloway 25 March 2014 в 20:29

Наткнулся на этот ответ из-за текущего дублированного вопроса. Наиболее приемлемый ответ предлагает решение, которое требует изменения базового фрейма данных. Это необязательно. Можно также просто разложить внутри вызова aes () напрямую или создать вместо него вектор для этого.

Это, конечно, не сильно отличается от ответа @Drew Steen, но с важной разницей в том, что вы не меняете исходные данные Рамка.

level_order <- c('virginica', 'versicolor', 'setosa') #this vector might be useful for other plots/analyses

ggplot(iris, aes(x = factor(Species, level = level_order), y = Petal.Width)) + geom_col()

или

level_order <- factor(iris$Species, level = c('virginica', 'versicolor', 'setosa'))

ggplot(iris, aes(x = level_order, y = Petal.Width)) + geom_col()

изменить: или непосредственно в вызове aes () без предварительно созданного вектора:

ggplot(iris, aes(x = factor(Species, level = c('virginica', 'versicolor', 'setosa')), y = Petal.Width)) + geom_col()

3
ответ дан Tjebo 17 August 2018 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: