楼主: ljt68
973 1

[经济分析入门] python制作三柱图 [推广有奖]

  • 0关注
  • 0粉丝

学前班

50%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0.0454
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
1 小时
注册时间
2021-11-14
最后登录
2022-4-3

楼主
ljt68 发表于 2021-11-14 15:57:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
import pandas as pd

import numpy as np

import matplotlib.pyplot as plt



path=r'D:\1.Python\全量明细.xlsx'

a=pd.read_excel(path,sheet_name='全量明细1')

b=pd.read_excel(path,sheet_name='全量明细2')

c=pd.read_excel(path,sheet_name='全量明细3')



a1=a.groupby(['业务线'])['处理天数'].agg( 'mean' )

b1=b.groupby(['业务线'])['处理天数'].agg( 'mean' )

c1=c.groupby(['业务线'])['处理天数'].agg( 'mean' )



ct=pd.DataFrame([a1,b1,c1],index=['一期','二期','三期'])

ct=ct.T

ct1=ct.sort_values(by='三期',ascending=False)

d=ct1.iloc[0:8,0:3]



#提取行
d1=d.iloc[[6]]
#删除指定行
d.drop(index=['管理'],inplace=True)
#新增指定行
d2=d.append(d1)

#提取特定两行
d3=d.iloc[[2,3]]

#增加行
d.loc['基础']=d3.apply(lambda x : x.sum(),axis=0)

# 提取数据

name = list(d.index)

x=range(len(name))



y1 = list(d.iloc[:,0])

y2 = list(d.iloc[:,1])

y5 = list(d.iloc[:,2])



# 设置正常显示中文标签

plt.rcParams['font.sans-serif'] = ['SimHei']

# 正常显示负号

plt.rcParams['axes.unicode_minus'] = False

# 设置字体大小

plt.rcParams.update({'font.size':20})

plt.figure(figsize=(10,6))

plt.subplot(111)


bar_width=0.2
#在主坐标轴绘制柱形图

plt.bar(x,y1,label='一期',color='royalblue')

plt.bar(x,y2,bottom=(d.iloc[:,0]),label='二期',color='orange')

plt.bar(x,y5,bottom=(d.iloc[:,0]+d.iloc[:,1]),label='三期',color='darkorchid')

#设置坐标轴的取值范围,避免柱子过高而与图例重叠

plt.ylim(0,60)

#设置图例

plt.legend(loc='upper center',ncol=3)

#设置横坐标的标签

plt.xticks(x,name,rotation=35,weight='bold')

#横坐标字体颜色

label_colors = ['black','black','black','black','red','black','black','black']

plt.gca().tick_params(axis='x', labelcolor='black')

#横坐标单个字体颜色
plt.gca().get_xticklabels()[7].set_color('red')

# 设置标题
plt.title('\n业务数量分布\n',fontsize=20,loc='center',color = 'k',weight='bold')


for a,b in enumerate(d.iloc[:,0]):
  plt.text(a, b/2, '%.0f'%b, ha='center', va= 'bottom',fontsize=13)
for a,b,c in zip(x,d.iloc[:,0]+d.iloc[:,1],d.iloc[:,0]+(d.iloc[:,1])/2):
  plt.text(a,c, '%.0f'%(round(b,0)), ha='center', va= 'bottom',fontsize=13)
for a,b,c in zip(x,d.iloc[:,0]+d.iloc[:,1]+d.iloc[:,2],d.iloc[:,0]+d.iloc[:,1]+(d.iloc[:,2])/2) :
  plt.text(a,c, '%.0f'%(round(b,0)), ha='center', va= 'bottom',fontsize=13)

plt.show()


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python Matplotlib Dataframe Rotation unicode

沙发
fin-qq 发表于 2021-11-16 16:38:40

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
扫码
拉您进交流群
GMT+8, 2026-1-28 14:36