我尝试使用ggplot2分别使用fill
和alpha
对barplot中的两个离散变量进行可视化。这样做的标准方法如下:r ggplot2:在条形图中对图例进行分组
#creating data and building the basic bar plot
library(ggplot2)
myleg<-read.csv(text="lett,num
a,1
a,2
b,1
b,2
h,1
h,2
h,3
h,4")
ggplot(myleg,aes(lett,alpha=factor(num),fill=lett)) +geom_bar(position=position_stack(reverse=T)) +scale_alpha_discrete(range=c(1,.1), name="alpha legend",labels=c("alpha lab 4","alpha lab 3","alpha lab 2", "alpha lab 1")) +labs(title="initial bar plot for data")
默认图例是根据呈现的两种不同的方式进行分组(着色为快报和灰度,或不透明度为NUM)。
我需要将图例分组为数据条。即三个色带,每个色带具有不断变化的α级别。部分解决方案是,分别生成与期望的3图例条情节如下:
ggplot(myleg,aes(lett,alpha=factor(num),fill=lett)) +geom_bar(position="stack",fill="#f8766d") +scale_alpha_discrete(name="red legend",labels=c("red lab 2","red lab 1"),breaks=c("3","4"))
ggplot(myleg,aes(lett,alpha=factor(num),fill=lett)) +geom_bar(position="stack",fill="#00ba38") +scale_alpha_discrete(name="green legend",labels=c("green lab 2","green lab 1"),breaks=c("3","4"))
ggplot(myleg,aes(lett,alpha=factor(num),fill=lett)) +geom_bar(position="stack",fill="#619cff") +scale_alpha_discrete(name="blue legend",labels=c("blue lab 4","blue lab 3","blue lab 2", "blue lab 1"))
所以现在我只能切割和三个图例条粘贴到主图形,例如,在Inkscape中,以产生期望的结果:
它是如何可能在一个体面的方式来编程吗?
马可的回答是“正确”的方式做到这一点,但对于特别繁琐的数字,在某些时候你在Inkscape中做这件事的方式是更好,更加个性化的方式。 – Brian
我编辑了我的答案,为@starsk发布的新问题提出了解决方案 –