用python画气泡图,气泡分布在4个象限(也可以作为象限图,只是更多一个气泡大小的维度)
看一下气泡图的示例:
图里有三个维度的数据:基础业务同比(横轴)、创新业务同比(纵轴),收入规模值(气泡大小)
直接附代码,重要步骤的注释都标在代码中了
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import xlrd
dataFile=xlrd.open_workbook('E:\python\city-bubble.xlsx')
cityBubble=pd.read_excel(dataFile)
print(cityBubble)
city=cityBubble['市州'].tolist()
yearCom=cityBubble['创新业务同比'].tolist()
monthCom=cityBubble['基础业务同比'].tolist()
income=cityBubble['整体收入'].tolist()
'''dataframe需要转化成list
city=pd.DataFrame(cityBubble,columns=['市州'])
yearCom=pd.DataFrame(cityBubble,columns=['同比'])
monthCom=pd.DataFrame(cityBubble,columns=['环比'])
income=pd.DataFrame(cityBubble,columns=['整体收入同比']
'''
# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
colors = np.random.rand(len(income)) # 颜色数组
plt.scatter(yearCom, monthCom, c=colors,s=3*np.sqrt(income), alpha=0.6) # 画散点图, alpha=0.6 表示不透明度为 0.6 这里我的income值有点大,导致气泡重叠较多,我取了一个平方根np.sqrt(income),为了缩小气泡
plt.text(np.max(yearCom)+0.05,np.mean(monthCom),'基础业务同比',fontsize=14)
plt.text(np.mean(yearCom),np.max(monthCom)+0.05,'创新业务同比',fontsize=14)
ax=plt.gca()
ax.spines['right'].set_color('none') #只保留一条纵坐标轴,形成象限图
ax.spines['top'].set_color('none')
#ax.xaxis.set_ticks_position('bottom')
#ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',np.mean(yearCom)))
ax.spines['bottom'].set_position(('data',np.mean(monthCom)))
for i in range(len(city)):#为每个气泡做标注
plt.annotate(city[i],xy=(yearCom[i],monthCom[i]),xytext=(yearCom[i]+0.005,monthCom[i]+0.005))
plt.show()