У меня есть выбор, в котором я генерирую данные из симуляции, а затем хотел бы построить график (график тепла/контур/3d-график и т. Д.); однако для них данные должны быть интерполированы с использованием таких функций, как interp
. Вот пример dataset.«interp» для дискретных точек для получения тепловой карты/контура R
Вот кусок кода, который я попытался ...
library(akima)
library(GA) # for persp3D; there exists another package for same function "fields"
data <- read.table(commandArgs()[3], header=T,sep="\t")
data <- na.omit(data)
qmax = max(data$q)
kmax = max(data$k)
x <- data$k_bike/kmax
y <- data$k_car/kmax
z <- data$q/qmax
matrix = interp(x,y,z)
persp3D(matrix ,nlevels=30, asp=1, xlim=c(0,1), ylim=c(0,1), color.palette=colorRampPalette(c("green3","yellow", "red"),space = "rgb"))
Теперь, благодаря интерполяции, существует много точек, которые имеют красный/оранжевый цвет вместо зеленого или около того. Для, например, если я использую levelplot
из lattice
levelplot(z~x*y, xlim=c(0,1), ylim=c(0,1), col.regions=colorRampPalette(c("green3","yellow", "red"),space = "rgb"))
Результатом является -
Теперь отчетливо видно, что существует очень мало точек данных, имеющих нулевой (или почти равна нулю) z
значение. Теперь проблема в том, что с levelplot я получаю артефакты (белый цвет для отсутствующих точек данных), и я хотел бы иметь лучшую интерполяцию. Есть ли какая-нибудь другая функция для этого?
Я также попытался контурные графики следующим образом:
scale <- (qmax+10)/qmax * c(0.000, 0.01, 0.05, 0.10, 0.25, 0.5, 0.75, 1.0)
filled.contour(matrix, nlevels=30, asp=1, xlim=c(0,1), ylim=c(0,1), levels=scale,color.palette=colorRampPalette(c("green3","yellow", "red"),space = "rgb"))
и результат снова (вид неправильной цветовой индикацией).
Короче - Я хотел бы иметь контур участка или участка 3d, но с четким (или правильным) индикации цвета ноль (около нуля)
z
значение данных точки, аналогичных уровню сюжет.
ваш второй подход ответил на мой вопрос. Тем не менее, я все же хотел бы попробовать сначала (а затем принять ответ). Я бы предположил, что 'as.mesh3d' требует' nat', но это порождает ошибки (** Ошибка в UseMethod ("as.mesh3d"): не применимый метод для 'as.mesh3d', примененный к объекту класса "deluder "**) – novice
@Amit; Думаю, вы не используете новейшую версию пакета 'rgl' (в старой версии нет метода обработки' deldir.obj'). Запустите 'install.packages (" rgl ")' и повторите попытку. – cuttlefish44
Спасибо. Сработала переустановка «rgl». Тем не менее, я все еще счастлив со вторым подходом. Спасибо за подсказку. – novice