我正在使用ggplot创建一个堆积条形图,如下所示:
plot_df <- df[!is.na(df$levels), ]
ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill")
Run Code Online (Sandbox Code Playgroud)
这给了我这样的东西:
如何反转堆叠条本身的顺序,以便第1级位于底部,第5级位于每个条形的顶部?
我已经看到了很多关于这方面的问题(例如,如何使用ggplot2上的标识来控制堆积条形图的排序),并且常见的解决方案似乎是按照该级别对数据帧重新排序,因为ggplot正在使用确定顺序
所以我尝试使用dplyr进行重新排序:
plot_df <- df[!is.na(df$levels), ] %>% arrange(desc(levels))
然而,情节也是如此.不论我是按升序还是按降序排列,似乎也没有区别
这是一个可重复的例子:
group <- c(1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4)
levels <- c("1","1","1","1","2","2","2","2","3","3","3","3","4","4","4","4","5","5","5","5","1","1","1","1")
plot_df <- data.frame(group, levels)
ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill")
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用facet_wrap创建一个堆积条形图,但我想要翻转我的堆叠变量("已开发")的顺序.我已经重新排序了这些因素,并尝试了"order = descend()"以及"scale_fill_manual",似乎没有任何效果.
这是我的代码:
developed=rep(c("developed","available"),6)
agriculture=rep(c(rep("loi",2), rep("dryland",2), rep("agroforestry",2)),2)
acres=c(7435,24254,10609,120500,10651,75606,6037,9910,4390,895,9747,46893)
islands=c(rep("All islands",6), rep("Oahu",6))
all_is2=data.frame(developed, agriculture, acres, islands)
head(all_is2)
developed agriculture acres island
1 developed loi 7435 All islands
2 available loi 24254 All islands
3 developed dryland 10609 All islands
4 available dryland 120500 All islands
5 developed agroforestry 10651 All islands
6 available agroforestry 75606 All islands
Run Code Online (Sandbox Code Playgroud)
改变"农业"和"发达"的因素水平
all_is2$agriculture=factor(all_is2$agriculture,levels=c("loi","dryland","agroforestry"))
all_is2$developed=factor(all_is2$developed,levels=c("developed","available"))
levels(all_is2$developed)
[1] "developed" "available"
Run Code Online (Sandbox Code Playgroud)
然后,绘图:
ggplot(all_is2,aes(x=agriculture,y=acres,fill=developed))+
geom_bar(position="stack", stat="identity")+
facet_wrap(~islands)+ scale_fill_grey(start=0.8, end=0.2, name="")+ xlab("")+ylab("Acres")+theme_bw()+ scale_y_continuous(labels=comma)
Run Code Online (Sandbox Code Playgroud)
我希望条形图的"开发"部分是灰色的,在条形图的"可用"部分的顶部是黑色的.并且图例也应该与条形的顺序相匹配.
此外,是否可以将facet_wrap"All islands"和"Oahu"移动到图表底部的"loi""dryland"和"agroforestry"下.谢谢您的帮助!!
我正在寻找一种根据“色调”绘制带有堆叠条的计数图的有效方法。标准色调行为是根据第二列的值将计数拆分为平行条,我正在寻找的是一种将色调条堆叠以便快速比较总数的有效方法。
让我用一个来自泰坦尼克号数据集的例子来解释:
import pandas as pd
import numpy as np
import seaborn as sns
%matplotlib inline
df = sns.load_dataset('titanic')
sns.countplot(x='survived',hue='class',data=df)
Run Code Online (Sandbox Code Playgroud)
提供带有计数图和色调的标准 Seaborn 行为
我正在寻找的是类似于每个色调的堆叠条
为了获得最后一张图片,我使用了以下代码
def aggregate(rows,columns,df):
column_keys = df[columns].unique()
row_keys = df[rows].unique()
agg = { key : [ len(df[(df[rows]==value) & (df[columns]==key)]) for value in row_keys]
for key in column_keys }
aggdf = pd.DataFrame(agg,index = row_keys)
aggdf.index.rename(rows,inplace=True)
return aggdf
aggregate('survived','class',df).plot(kind='bar',stacked=True)
Run Code Online (Sandbox Code Playgroud)
我相信有一些更有效的方法。我知道 seaborn 对堆叠条形不太友好……所以我尝试用我的函数重新排列数据集并使用 matplotlib,但我想还有一种更聪明的方法可以做到这一点。
非常感谢!
我正在尝试使用Google Charts API生成垂直堆叠的条形图,我认为当找到该选项时我找到了解决方案:
isStacked: true
Run Code Online (Sandbox Code Playgroud)
但是,这似乎是水平添加堆叠(见下面的链接),我似乎无法找到一种方法来做到这一点.有人之前遇到过这个或者可以帮助我吗?
见:http://jsfiddle.net/tmA55/1/
谢谢
DF <- read.table(text="Rank F1 F2 F3
1 500 250 50
2 400 100 30
3 300 155 100
4 200 90 10", header=TRUE)
library(reshape2)
DF1 <- melt(DF, id.var="Rank")
library(ggplot2)
ggplot(DF1, aes(x = Rank, y = value, fill = variable)) +
geom_bar(stat = "identity")
Run Code Online (Sandbox Code Playgroud)
是否可以使用ggplot2创建堆叠条,如下图?我不想用不同的颜色区分堆栈.
编辑:根据Pascal的评论,
ggplot(DF1, aes(x = Rank, y = value)) +
geom_bar(stat = "identity",lwd=2, color="white")
Run Code Online (Sandbox Code Playgroud)
我仍然有酒吧的白色边框.
我想将相应的值标签放在geom_col
每个条形段中间的堆积条形图中.
但是,我天真的尝试失败了.
library(ggplot2) # Version: ggplot2 2.2
dta <- data.frame(group = c("A","A","A",
"B","B","B"),
sector = c("x","y","z",
"x","y","z"),
value = c(10,20,70,
30,20,50))
ggplot(data = dta) +
geom_col(aes(x = group, y = value, fill = sector)) +
geom_text(position="stack",
aes(x = group, y = value, label = value))
Run Code Online (Sandbox Code Playgroud)
显然,设置y=value/2
为geom_text
不帮助,无论是.此外,文本的顺序错误(反向).
任何(优雅的)想法如何解决这个问题?
我想绘制一个堆叠的条形图,如附图,但我希望颜色在类别aa,bb和cc之间变化.具体来说,我希望bb中的灰色块为红色,cc中的灰色块为绿色.以下代码作为一个简单示例,说明了我已经尝试过的内容:
aa=c(0.2,0.6,0.1,0.1)
bb=c(0.4,0.5,0.05,0.05)
cc=c(0.5,0.25,0.1,0.15)
x=cbind(aa,bb,cc)
x #the data
aa bb cc
[1,] 0.2 0.40 0.50
[2,] 0.6 0.50 0.25
[3,] 0.1 0.05 0.10
[4,] 0.1 0.05 0.15
Run Code Online (Sandbox Code Playgroud)
默认行为,所有块在每个类别中具有相同的颜色
col=rep(c("white","grey"),2)
col
# [1] "white" "grey" "white" "grey"
barplot(x,col=col)
Run Code Online (Sandbox Code Playgroud)
但我希望灰色块bb
是红色,灰色块cc
是绿色
col=cbind(rep(c("white","grey"),2),rep(c("white","red"),2),rep(c("white","green"),2))
col
[,1] [,2] [,3]
[1,] "white" "white" "white"
[2,] "grey" "red" "green"
[3,] "white" "white" "white"
[4,] "grey" "red" "green"
barplot(x,col=col) #not working
col=c(rep(c("white","grey"),2),rep(c("white","red"),2),rep(c("white","green"),2))
col
[1] "white" "grey" "white" "grey" "white" "red" "white" "red" "white" "green" "white" …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Stacked Bar图表上实现click事件.
数据如下所示:
var chartData = {
type: 'horizontalBar',
data: {
labels: ['A0224', 'A3681', 'A3984', 'A4101', 'A4150', 'B0682', 'Others'],
datasets: [
{
label: "P1",
backgroundColor: '#cc3399',
data: [6, 7, 6, 8, 6, 10, 3]
},
{
label: "P2",
backgroundColor: '#0099ff',
data: [8, 9, 5, 8, 6, 10, 3]
},
{
label: "P3",
backgroundColor: '#0022ff',
data: [6, 7, 6, 8, 6, 10, 3]
}
]
},
options: {
legend: { display: false },
scales: {
yAxes: [{
stacked: true
}],
xAxes: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试绘制一个带有堆积条形图的 facet_grid。
我想使用 Seaborn。它的 barplot 函数不包含堆叠参数。
我尝试将 FacetGrid.map 与自定义可调用函数一起使用。
import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
def custom_stacked_barplot(col_day, col_time, col_total_bill, **kwargs):
dict_df={}
dict_df['day']=col_day
dict_df['time']=col_time
dict_df['total_bill']=col_total_bill
df_data_graph=pd.DataFrame(dict_df)
df = pd.crosstab(index=df_data_graph['time'], columns=tips['day'], values=tips['total_bill'], aggfunc=sum)
df.plot.bar(stacked=True)
tips=sns.load_dataset("tips")
g = sns.FacetGrid(tips, col='size', row='smoker')
g = g.map(custom_stacked_barplot, "day", 'time', 'total_bill')
Run Code Online (Sandbox Code Playgroud)
但是,我分别得到了一个空画布和堆积条形图。
空画布:
Graph1分开:
图2:。
我该如何解决这个问题?谢谢您的帮助!
我正在使用谷歌图表的堆积柱形图,我想要实现的是显示每列顶部的总数,我正在使用注释.当您查看图像时,不知何故只有第5列(1,307.20)上的注释按预期工作.
在我调查的时候,这看起来像是谷歌图表的一个错误,这个错误可以解释如下
[[Date, Car, Motobike, {role: :annotation}],
[June 2015, 500, 0, 500],
[Feb 2015, 500, 600, 1100]]
[March 2015, 700, 0, 700],
Run Code Online (Sandbox Code Playgroud)
使用上面的数据,2015年2月的注释是唯一正确显示的注释,另外2个没有,因为当时的最后一个值是0,当我在6月和3月将最后一个值更改为1时,注释正确显示.
然后我想到一个解决方法是始终在顶部显示"非零"数据,这是结果:
正确地将注释移到顶部,但正如您所看到的,它位于列中,我想要实现的是将其移动到列的顶部.
我坚持了一段时间,谷歌文档对这种情况没有多大帮助.任何帮助将受到高度赞赏
stacked-chart ×10
r ×5
bar-chart ×4
ggplot2 ×4
python ×2
seaborn ×2
annotations ×1
chart.js ×1
charts ×1
dplyr ×1
facet-grid ×1
facet-wrap ×1
geom-text ×1
javascript ×1
jquery ×1
matplotlib ×1
pandas ×1
stacked ×1