如何使python中的matplotlib .bar贡献图代码工作?

如何解决如何使python中的matplotlib .bar贡献图代码工作?

我正在尝试绘制财务贡献分析,一个带有两个垂直条的条形图,一个代表在一定时期内由股权贡献的投资组合收益,另一个代表Fixed Income (bonds)

%matplotlib inline
import numpy as np
import pandas as pd
import itertools
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import matplotlib.lines as mlines
import matplotlib.dates as mdates
import matplotlib.font_manager as fm
import matplotlib.patches as mpatches
import matplotlib.transforms as mtrans


d = {'col1': [0.006269,0.003842,0.002237,0.001448,0.000752,0.000166]}
equity = pd.DataFrame(data=d,index=['Aktien nordamerika','Gold','Aktien Flexibel','Aktien Europa','Aktien Schwellenlaender','Aktien Pazifik'])

d2 = {'col1': [0.009533,0.003879,0.001926,0.000714]}
bonds = pd.DataFrame(data=d2,index=['Anleihen Investmentgrade','Hedgefonds','Hochzinsanleihen','Anleihen Schwellenlaender'])

从x轴开始的竖线应总计代表['equity','bonds‘]的总体增益,但应除以df中定义的索引。

我试图通过使用迭代器构建块itertools.zip_longest来分配增量增益条形图的值,然后为每个部分指定颜色,来做到这一点。

fig,ax = plt.subplots()
fig.set_size_inches(4,4.3)

bar_width = 0.26

x_values = np.array([0,1.2])
x_pos = [list(x_values)]*2 + [x_values[0]]*4   

pl = [(p1,p2) if p2 is not None else p1 for p1,p2 in itertools.zip_longest(list(equity['col1'].values),list(bonds['col1'].values))]
colors = np.array((
                ['#FF7600','#A9A9A9','#1778A6','#146189','#5794B9','#B0D2E7'],['#004232','#3AC2A0','#007558','#2A8C74']))
colormap = [(c1,c2) if c2 is not None else c1 for c1,c2 in itertools.zip_longest(colors[0],colors[1])]

然后我只需要使用matplotlib的matplotlib.pyplot.bar(x,height,width=0.8,bottom=None,*,align='center',data=None,**kwargs)来创建所需的条形图。

for x,p,c in zip(x_pos,pl,colormap):
    ls_sub_aktien = plt.bar(x,align='edge',width=bar_width,linewidth=0.0001,color=c)

但是在['bonds']栏中,输出没有给我总的除法,在该栏中,只有两个行项的颜色按定义...

我得到的输出在右侧栏上缺少4个颜色拆分:

.jpg

此外,左侧的栏似乎还包含一种颜色,该颜色实际上应该在右侧的栏中找到。

如果您遇到了类似的问题并记住了解决方法,或者对如何使用其他方法创建此图表提出了建议,那将是惊人的。 对不起,我的英语,如果还不清楚,请告诉我。请尝试一下。我想知道您能否解决它,谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?