从 jpg 中提取十六进制颜色,存储在 data.frame 中,然后使用 ggplot 绘图
extracting hex colors form jpeg, store in data.frame, and then plotting with ggplot
如标题所说。我有一张图像,我想提取颜色的十六进制值,存储在 data.frame 中,然后使用 ggplot 进行绘图。
这是我拥有的:
library(ggplot2)
aws.logo = 'https://eventil.s3.amazonaws.com/uploads/group/avatar/8626/medium_highres_470196509.jpeg'
temp = tempfile()
download.file(aws.logo, temp, mode = 'wb')
## matrix of colors
y = jpeg::readJPEG(temp)
val <- rgb( y[,,1], y[,,2], y[,,3], maxColorValue = 255)
aws.img <- matrix(val, dim(y)[1], dim(y)[2])
out = reshape2::melt(aws.img)
names(out) = c('col', 'row', 'value')
out$value = as.character(out$value)
ggplot(out) +
geom_point(aes(x = row, y = -col), color = out$value) + ## why do I have to flip the order of
theme(legend.position="none") ## col after reshaping?
为什么颜色与网站上的标志不同?
raedJPEG
将 return 0/1 比例的 RGB 颜色值,而不是 0/255 比例。使用
val <- rgb( y[,,1], y[,,2], y[,,3], maxColorValue = 1)
此外,通常最好不要在 ggplot 调用中进行任何 $
操作。像这样会更安全
ggplot(out) +
geom_point(aes(x = row, y = -col, color = value)) +
theme(legend.position="none") +
scale_color_identity ()
如标题所说。我有一张图像,我想提取颜色的十六进制值,存储在 data.frame 中,然后使用 ggplot 进行绘图。
这是我拥有的:
library(ggplot2)
aws.logo = 'https://eventil.s3.amazonaws.com/uploads/group/avatar/8626/medium_highres_470196509.jpeg'
temp = tempfile()
download.file(aws.logo, temp, mode = 'wb')
## matrix of colors
y = jpeg::readJPEG(temp)
val <- rgb( y[,,1], y[,,2], y[,,3], maxColorValue = 255)
aws.img <- matrix(val, dim(y)[1], dim(y)[2])
out = reshape2::melt(aws.img)
names(out) = c('col', 'row', 'value')
out$value = as.character(out$value)
ggplot(out) +
geom_point(aes(x = row, y = -col), color = out$value) + ## why do I have to flip the order of
theme(legend.position="none") ## col after reshaping?
为什么颜色与网站上的标志不同?
raedJPEG
将 return 0/1 比例的 RGB 颜色值,而不是 0/255 比例。使用
val <- rgb( y[,,1], y[,,2], y[,,3], maxColorValue = 1)
此外,通常最好不要在 ggplot 调用中进行任何 $
操作。像这样会更安全
ggplot(out) +
geom_point(aes(x = row, y = -col, color = value)) +
theme(legend.position="none") +
scale_color_identity ()