2022年 11月 5日

Python绘制气泡图

实现python绘制气泡图,用气泡的不同颜色,不同大小展示信息

代码部分

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator

def DrawBubble(read_name):#气泡图
    sns.set(style = "whitegrid")#设置样式
    fp = pd.read_excel(read_name)#数据来源
    x = fp['序号']#X轴数据
    y = fp['数值']#Y轴数据
    z = fp['数值']#用来调整各个点的大小s
    import matplotlib
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False


    cm = plt.cm.get_cmap('jet')   #RdYlBu plasma   jet
    fig,ax = plt.subplots(figsize=(30,20))
    #注意s离散化的方法,因为需要通过点的大小来直观感受其所表示的数值大小
    #我所使用的是当前点的数值减去集合中的最小值后+0.1再*1000
    #参数是X轴数据、Y轴数据、各个点的大小、各个点的颜色
    bubble = ax.scatter(x, y , s = 3*np.sqrt(z)* 100, c = z, cmap = cm,vmin = 0,vmax = 25, linewidth = 0.5, alpha = 0.5)
    ax.grid()
    fig.colorbar(bubble)
    #plt.ylim((-1, 126))
    #ax.set_xlabel('people of cities', fontsize = 15)#X轴标签
    ax.set_ylabel('参数出现次数', fontsize = 18)#Y轴标签
    plt.xticks(())
    plt.yticks(())
    for i in range(len(fp['数值'])):  # 为每个气泡做标注
        plt.annotate(fp['数值'][i], xy=(fp['序号'][i], fp['数值'][i]), xytext=(fp['序号'][i]-0.10, fp['数值'][i] - 0.2), fontproperties="Times New Roman")
        plt.annotate(fp['名称'][0], xy=(fp['序号'][0], fp['数值'][0]), xytext=(fp['序号'][0]- 0.52, fp['数值'][0]-1.35), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][1], xy=(fp['序号'][1], fp['数值'][1]), xytext=(fp['序号'][1]- 0.52, fp['数值'][1]+1.1), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][2], xy=(fp['序号'][2], fp['数值'][2]), xytext=(fp['序号'][2]- 0.45, fp['数值'][2]+1.1), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][3], xy=(fp['序号'][3], fp['数值'][3]), xytext=(fp['序号'][3]- 0.42, fp['数值'][3]+1.1), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][4], xy=(fp['序号'][4], fp['数值'][4]), xytext=(fp['序号'][4]- 0.20, fp['数值'][4]+1.1), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][5], xy=(fp['序号'][5], fp['数值'][5]), xytext=(fp['序号'][5]- 0.40, fp['数值'][5]+1.1), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][6], xy=(fp['序号'][6], fp['数值'][6]), xytext=(fp['序号'][6]- 0.35, fp['数值'][6]+1.05), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][7], xy=(fp['序号'][7], fp['数值'][7]), xytext=(fp['序号'][7]- 0.27, fp['数值'][7]+0.95), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][8], xy=(fp['序号'][8], fp['数值'][8]), xytext=(fp['序号'][8]- 0.45, fp['数值'][8]+0.9), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][9], xy=(fp['序号'][9], fp['数值'][9]), xytext=(fp['序号'][9]- 0.36, fp['数值'][9]+1.1), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][10], xy=(fp['序号'][10], fp['数值'][10]), xytext=(fp['序号'][10]- 0.50, fp['数值'][10]+0.95), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][11], xy=(fp['序号'][11], fp['数值'][11]), xytext=(fp['序号'][11]- 0.40, fp['数值'][11]+0.75), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][12], xy=(fp['序号'][12], fp['数值'][12]), xytext=(fp['序号'][12]- 0.80, fp['数值'][12]-0.9), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][13], xy=(fp['序号'][13], fp['数值'][13]), xytext=(fp['序号'][13]- 0.50, fp['数值'][13]+0.75), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][14], xy=(fp['序号'][14], fp['数值'][14]), xytext=(fp['序号'][14]- 0.26, fp['数值'][14]-0.9), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][15], xy=(fp['序号'][15], fp['数值'][15]), xytext=(fp['序号'][15]- 0.64, fp['数值'][15]+0.75), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][16], xy=(fp['序号'][16], fp['数值'][16]), xytext=(fp['序号'][16]- 0.50, fp['数值'][16]-0.9), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][17], xy=(fp['序号'][17], fp['数值'][17]), xytext=(fp['序号'][17]- 0.75, fp['数值'][17]+0.75), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][18], xy=(fp['序号'][18], fp['数值'][18]), xytext=(fp['序号'][18]- 0.50, fp['数值'][18]-0.9), fontsize=10.2, fontproperties="simhei")
        plt.annotate(fp['名称'][19], xy=(fp['序号'][19], fp['数值'][19]), xytext=(fp['序号'][19]- 0.62, fp['数值'][19]+0.75), fontsize=10.2, fontproperties="simhei")

    plt.show()
    #fig.savefig('hah.png', bbox_inches='tight', dpi=800, pad_inches=0.0)
    fig.savefig('液滴.jpg', dpi=800)
if __name__=='__main__':
    DrawBubble("液滴.xlsx")#气泡图


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

运行效果
后期再加
欢迎加群:620139909
在这里插入图片描述