Я боролся с той же проблемой раньше. Похоже, что ggplot складывает столбцы в зависимости от их появления в кадре данных. Таким образом, решение вашей проблемы состоит в сортировке данных по коэффициенту заполнения в обратном порядке, в котором вы хотите, чтобы они отображались в легенде: нижний элемент в верхней части информационного кадра и верхний элемент в нижней части:
ggplot(ts[order(ts$y, decreasing = T),],
aes(z, x, fill=factor(y, levels=c("blue","white" )))) +
geom_bar(stat = "identity")
Используя образцы данных, я создал три графика с разным порядком данных в кадре, я подумал, что больше заполнения переменные сделают вещи немного понятнее.
set.seed(123)
library(gridExtra)
df <- data.frame(x=rep(c(1,2),each=5),
fill_var=rep(LETTERS[1:5], 2),
y=1)
#original order
p1 <- ggplot(df, aes(x=x,y=y,fill=fill_var))+
geom_bar(stat="identity") + labs(title="Original dataframe")
#random order
p2 <- ggplot(df[sample(1:10),],aes(x=x,y=y,fill=fill_var))+
geom_bar(stat="identity") + labs(title="Random order")
#legend checks out, sequence wird
#reverse order
p3 <- ggplot(df[order(df$fill_var,decreasing=T),],
aes(x=x,y=y,fill=fill_var))+
geom_bar(stat="identity") + labs(title="Reverse sort by fill")
plots <- list(p1,p2,p3)
do.call(grid.arrange,plots)
Тип BitmapImage
наследует BitmapSource
и, наконец, ImageSource
(оба являются абстрактными классами). Вам нужно проверить фактический тип вашего объекта, то есть проверить object.GetType (). Name
. Если вам повезет, он может фактически вернуть объект BitmapSource
, и вам просто нужно будет привести его к этому типу, прежде чем вы сможете использовать его как таковой.