Я делаю что-то похожее на @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"
Очевидно, что это менее полезно для небольших классов.
Трудно ответить на ваш конкретный вопрос без полного, воспроизводимого примера. Однако что-то вроде этого должно работать:
#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"))
Однако это опасно, если у вас много уровней: если вы ошиблись в любом из них, это вызовет проблемы.
Наткнулся на этот ответ из-за текущего дублированного вопроса. Наиболее приемлемый ответ предлагает решение, которое требует изменения базового фрейма данных. Это необязательно. Можно также просто разложить внутри вызова 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()
.csv
), R присваивает целочисленные значения в алфавитном порядке, а не в том порядке, в котором они отображаются в файле. Вы можете спорить, имеет ли это смысл, ноggplot2
затем делает логическую вещь, которая должна отображать уровни факторов в порядке их целочисленных значений. Ваша жалоба сread.table
, а неggplot2
. – Drew Steen 25 March 2014 в 16:06