我正面临BlogPlugin
的行为,我无法理解的排序和堆积条形图。
我已经读过一些有关它的问题(here,here和等等),但不幸的是我找不到适合我的解决方案。也许答案很简单,但我看不到。希望不是骗子。
我的主要目标是根据排序列(在此称为ggplot2
)对每个堆栈进行独立排序。
这里有一些数据:
ordering
因此,有一个ID,一个值,一个用于排序的值和一个填充,数据就像在library(dplyr)
library(ggplot2)
dats <- data.frame(id = c(1,1,1,2,2,3,3,3,3),
value = c(9,6,4,5,6,4,3,4,5),
ordering = c(1,2,3,2,3,1,3,2,4),
filling = c('a','b','c','b','a','a','c','d','b')) %>% arrange(id,ordering)
列中一样应该在图中进行排序。
我试图绘制它:想法是将ordering
(值id
,由value
填充为x轴堆叠的条形图,但填充按顺序排列filling
的值,按升序 ie ordering
每列底部的最大值。 ordering
的顺序与数据集的顺序相同,即每一列都有独立的顺序。
您可以想象它们是假数据,因此id的数量可以变化。
filling
当我绘制它们时,有一些我不理解的东西:
id value ordering filling
1 1 9 1 a
2 1 6 2 b
3 1 4 3 c
4 2 5 2 b
5 2 6 3 a
6 3 4 1 a
7 3 4 2 d
8 3 3 3 c
9 3 5 4 b
第二个和第三个ID的顺序不正确,我应该具有原始数据集的顺序。
答案 0 :(得分:6)
如果您使用单独的var IpAddress = Dns.GetHostAddresses(Dns.GetHostName()).FirstOrDefault();
if (IpAddress != null)
{
return IpAddress.ToString();
}
,则可以使订单不同。
geom_bar
更一般地:
dats %>%
ggplot(aes(x = id, y = value, fill = reorder(filling,-ordering))) +
geom_bar(stat = "identity", position = "stack", data = dats %>% filter(id == 1)) +
geom_bar(stat = "identity", position = "stack", data = dats %>% filter(id == 2)) +
geom_bar(stat = "identity", position = "stack", data = dats %>% filter(id == 3)) +
guides(fill=guide_legend("ordering"))
答案 1 :(得分:5)
问题在于,根据您的情况,不同的条形应该以不同的顺序使用filling
的相同值(级别)。这与ggplot
的工作方式相冲突:采用因子水平(已经具有一定顺序)并以相同的方式将其应用于每个柱。
一种解决方法是...创建许多因子水平。
ggplot(dats, aes(x = id, y = value, fill = interaction(-ordering, id))) +
geom_bar(stat = "identity", position = "stack")
由于过于详细,现在该“过于慷慨”。但是,我们现在要做的就是处理图例和不同的颜色:
dats <- arrange(dats, id, -ordering)
aux <- with(dats, match(sort(unique(filling)), filling))
ggplot(dats, aes(x = id, y = value, fill = interaction(-ordering, id))) +
geom_bar(stat = "identity", position = "stack") +
scale_fill_manual("Ordering", values = scales::hue_pal()(4)[dats$filling],
labels = with(dats, filling[aux]),
breaks = with(dats, interaction(-ordering, id)[aux]))
在这里,我首先重新排列dats
的行,以避免以后再执行此操作。那么aux
是辅助向量
aux
# [1] 3 2 1 8
给出a
,b
,c
和d
(按顺序)出现在dats
中的任意位置(每个位置一个),稍后再次有用。然后,我只需设置相应的比例值,标签和折线...最后,我使用scales::hue_pal
恢复原始调色板。
答案 2 :(得分:-1)
这里的问题是元素filling = d
仅在第三组中以较低的值出现。一种解决方案是用0填充不存在的值:
library(dplyr)
#>
#> Attachement du package : 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(ggplot2)
dats <- data.frame(id = c(1,1,1,1,2,2,2,2,3,3,3,3),
value = c(9,6,4,0,5,6,0,0,4,3,4,5),
ordering = c(1,2,3,5,2,3,5,5,1,3,2,4),
filling = c('a','b','c','d','b','a','c','d','a','c','d','b')) %>% arrange(id,ordering)
ggplot(dats,aes(x = id,
y = value,
fill = reorder(filling,-ordering))) +
geom_bar(stat = "identity",position = "stack") +
guides(fill=guide_legend("ordering"))
由reprex package(v0.2.1)于2018-12-03创建