python作折线图、柱形图

发布时间 2023-03-29 15:36:40作者: 生活是用来折腾的
  • 折线图
x=[2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021]
y=[61.76,123.21,183.10,202.59,245.21,252.67,299.28,334.44,360.51,380.13,410.31]

#ax1 = plt.subplots()
# 设置图框的大小
fig = plt.figure(figsize=(10,5))

# 绘图--总体
plt.plot(x, # x轴数据
         y, # y轴数据
         linestyle = '-', # 折线类型
         marker = 'o', # 点的形状
         label = '总体',
        color = 'black',
        markeredgecolor='black',# 添加标签
        
        )

# 添加标题和坐标轴标签
plt.ylabel('平均消费倾向(%)')
plt.title('福建省数字普惠金融总指数发展')
plt.xticks(x)

# 显示图例
plt.legend(loc='lower center', bbox_to_anchor=(0.5, -0.4), ncol=3)# loc下方居中,bbox位置,ncol y的数量



for i in range(len(x)):
    plt.text(x[i]-0.2,y[i]+10,y[i],ha="center")
    

# 显示图形
plt.show()

 

#导入库
import numpy as np
import matplotlib.pyplot as plt
import fontTools
#windows设置字体
#plt.rcParams['font.sans-serif']=['SimHei']
#plt.rcParams['axes.unicode_minus']=False

#macOS设置字体
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
x=[2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021]
y=[77.54491018,79.93928927,77.96682062,75.65042219,74.20091324,73.04766734,70.71685304,70.44479843,71.07479784,67.5393796,69.94761307]
z=[66.89284137,66.27339155,72.9892809,72.2739405,70.68369647,69.43410896,66.61367657,66.81940125,67.83428321,64.64588634,66.37074697]
w=[74.09727759,74.26507475,87.55808856,87.39130435,86.71065033,86.07907194,85.72390572,83.85051344,83.2021668,78.25191571,83.04274829]

# 设置图框的大小
fig = plt.figure(figsize=(6,3))

# 绘图--总体
plt.plot(x, # x轴数据
         y, # y轴数据
         linestyle = '-', # 折线类型
         marker = 'o', # 点的形状
         label = '总体',
         color = 'red',
        markeredgecolor='black') # 添加标签
# 绘图--城镇
plt.plot(x, # x轴数据
         z, # y轴数据
         linestyle = '--', # 折线类型
         marker = 'o', # 点的形状
         label = '城镇',
        color = 'black',
        markeredgecolor='black') # 添加标签
# 绘图--农村
plt.plot(x, # x轴数据
         w, # y轴数据
         linestyle = ':' ,# 折线类型
         marker = 'o', # 点的形状
         label = '农村',
         color = 'green',
        markeredgecolor='black') # 添加标签

# 添加标题和坐标轴标签
plt.ylabel('消费倾向值')
plt.title('福建省城乡居民消费倾向')
plt.xticks(x,color='blue',rotation=15)

# 显示图例
plt.legend(loc='lower center', bbox_to_anchor=(0.5, -0.3), ncol=3)# loc下方居中,bbox位置,ncol y的数量

    
for i in range(len(x)):
    
    plt.text(x[i],53,round(y[i],3),ha="center",fontsize=9)
    plt.text(x[i],50,round(z[i],3),ha="center",fontsize=9)
    plt.text(x[i],47,round(w[i],3),ha="center",fontsize=9)
    
plt.text(x[i]-11.5,53,'总体',ha="center",fontsize=12,fontweight='bold') #fontweight 字体粗细
plt.text(x[i]-11.5,50,'城镇',ha="center",fontsize=12,fontweight='bold')
plt.text(x[i]-11.5,47,'农村',ha="center",fontsize=12,fontweight='bold')
    

# 显示图形
plt.show()

 

  • 柱形图
x=[1,2,3,4,5,6,7,8]
y=[326.01,309.10,294.93,316.46,311.35,318.61,301.99,343.34]
labels=['福州市','龙岩市','南平市','宁德市','莆田市','泉州市','三明市','厦门市']

plt.bar(x,y,align="center",width=0.6,tick_label=labels,ec='gray')
plt.xlabel(u"城市")
plt.ylabel(u"总指数/%")

plt.title('2021年福建省各市数字普惠金融总指数分布')

#展示数据,参数为x坐标,y坐标,值,位置
for i in range(len(x)):
    plt.text(x[i],y[i]+3,y[i],ha="center")

 

def drawHistogram_1():
    listDate=[2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021]
    list1=[16661,18593,20564,22204,23520,25006,25980,28145,30946,30487,33942]
    list2=[6505,7402,9986,11055,11960,12911,14003,14943,16281,16339,19290]
    length = len(list1)
    x = np.arange(length)   # 横坐标范围

    plt.figure()
    total_width, n = 0.8, 2   # 柱状图总宽度,有几组数据
    width = total_width / n   # 单个柱状图的宽度
    x1 = x - width / 2   # 第一组数据柱状图横坐标起始位置
    x2 = x1 + width   # 第二组数据柱状图横坐标起始位置

    plt.title("福建省城乡居民人均消费支出")   # 柱状图标题
    # plt.xlabel("星期")   # 横坐标label 此处可以不添加
    plt.ylabel("支出(元)")   # 纵坐标label
    plt.bar(x1, list1, width=width, label="城镇")
    plt.bar(x2, list2, width=width, label="农村")
    plt.xticks(x, listDate)   # 用星期几替换横坐标x的值
    plt.legend()   # 给出图例
    for a, b in zip(x1, list1):
        plt.text(a, b + 0.1, '%.0f' % b, ha='center', va='bottom', fontsize=7)
    for a, b in zip(x2, list2):
        plt.text(a, b + 0.1, '%.0f' % b, ha='center', va='bottom', fontsize=7)


    plt.show()

if __name__ == '__main__':
    drawHistogram_1()

 

  • 柱形图和折线图
x=[2012,2014,2016,2018]
z=[99.69,179.75,230.41,300.21]
y=[12035,15686,19969,22586]

fig, ax1 = plt.subplots()

ax2 = ax1.twinx()    #使用twinx添加y轴的坐标轴
ax1.plot(x, y, linestyle = '-', # 折线类型
         marker = 's', # 点的形状
         label = '人均消费支出',
        color = 'black',
        markeredgecolor='black')
ax2.bar(x, z,label='数字普惠金融总指数')#柱状图
plt.xticks(x)
#设置刻度范围
ax1.set_ylim(0,25000)
ax2.set_ylim(0,350)
# 显示图例
ax1.legend(loc='lower center', bbox_to_anchor=(0.65, -0.15))# loc下方居中,bbox位置,ncol y的数量
ax2.legend(loc='lower center', bbox_to_anchor=(0.3, -0.15))
#展示数据,参数为x坐标,y坐标,值,位置
for i in range(len(x)):
    ax1.text(x[i]-0.2,y[i]+300,y[i],ha="center")
    ax2.text(x[i],z[i]+2,z[i],ha="center")
# 设置网格线
ax1.grid(True, axis='y') 
plt.show()