Вот возможное решение, если вы согласны использовать пакет scatterplot3d
вместо rgl
. Это в основном то же самое, но не интерактивное. Вот ваш код, модифицированный для получения ожидаемого результата.
x = matrix(NA,100,6)
#x value
x[,1] = runif(100, 0, 10)
#y value
x[,2] = runif(100, 0, 10)
#z value
x[,3] = x[,1]+x[,2]
#additional value
x[,4] = runif(100, 0, 1)
#find out in which interval each additional value is
intervals = seq(0,1,1/10)
x[,5] = findInterval(x[,4], intervals)
#produce gradient of colors
#you can define different colors (two or more)
gradient <- colorRampPalette(colors = c("yellow", "green", "blue"))
colours <- gradient(length(intervals))
x[,6] = colours[x[,5]]
library(scatterplot3d)
png('3d.png', width = 600, height = 400)
layout(matrix(1:2, ncol=2), width = c(3, 1), height = c(1, 1))
scatterplot3d(as.numeric(x[,1]),as.numeric(x[,2]), as.numeric(x[,3]), type = 'p',
cex.symbols = 1.25, color=x[,6], pch = 16, xlab = "x(t)", ylab = "y(t)", zlab = "z(t)")
plot(x = rep(1, 100), y = seq_along(x[,6]),
pch = 15, cex = 2.5,
col = gradient(length(x[,6])),
ann = F, axes = F, xlim = c(1, 2))
axis(side = 2, at = seq(1, nrow(x), length.out = 11),
labels = 1:11,
line = 0.15)
dev.off()
Это построит следующий график
Ответ паоло является большим; я ранее не знал о новой поддержке прокси. Единственная проблема с ним - то, что необходимо быть нацелены на код к модели OrderedUser - который в некотором смысле подобен простому выполнению a User.objects.filter(....).order_by('username')
. Другими словами, это является менее подробным, но необходимо явно написать код для предназначения для него. (Конечно, как упомянуто, необходимо было бы также быть на соединительной линии.)
Мой смысл состоит в том, что Вы хотите все User
запросы, которые будут заказаны, включая в приложениях сторонних производителей, которыми Вы не управляете. При таком обстоятельстве, monkeypatching базовый класс относительно легко и очень маловероятен вызвать любые проблемы. В центральной части (такой как Ваш settings.py), Вы могли сделать:
from django.contrib.auth.models import User
User.Meta.ordering = ['username']
ОБНОВЛЕНИЕ: Django 1.5 теперь поддерживает настраиваемые модели User.
Можно или разделить Пользователя на подклассы:
class OrderedUser(User):
class Meta:
ordering = ['-id', 'username']
Или Вы могли использовать упорядочивание в ModelAdmin:
class UserAdmin(admin.ModelAdmin):
ordering = ['-id', 'username']
# unregister user since its already been registered by auth
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
Примечание: метод ModelAdmin только изменит упорядочивание в администраторе, это не изменит упорядочивание запросов.
Это - то, как руководство Django рекомендует сделать это:
Вы могли также использовать модель прокси для определения другого упорядочивания значения по умолчанию на модели. Стандартная модель User не имеет никакого упорядочивания, определенного на нем (намеренно; сортировка является дорогой, и мы не хотим делать все это время, когда мы выбираем пользователей). Вы могли бы хотеть регулярно заказать атрибутом имени пользователя при использовании прокси. Это легко:
class OrderedUser(User):
class Meta:
ordering = ["username"]
proxy = True
Теперь запросы обычного пользователя будут unorderd, и запросы OrderedUser будут заказаны именем пользователя.
Обратите внимание, что, чтобы это работало, у Вас должен будет быть магистральный контроль Django, поскольку это является довольно новым.
Если у Вас не будет доступа к нему, то необходимо будет избавиться от части прокси и реализовать ее тот путь, который может стать громоздким. Проверьте эту статью о том, как выполнить это.
Свяжитесь с автором и попросите, чтобы они внесли изменение.