22-6-python绘图示例


不足之处:

  • 程序太长,函数缺少,不好调用
  • 注释太少

错位折线图

在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created on Wed May 11 09:55:51 2022
目标:绘制多曲线x轴错位,比较图
实现
①底色填充
②“自定义”图例
③去除边框
④设置绘图界面大小
⑤字典设置
⑥定义画图区间
@author: hp
"""

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
workbook = pd.read_excel(r"E:\a毕业设计\3-程序\6-耦合协调度.xlsx",encoding = "gbk", index_col = "年份")

plt.rcParams['font.sans-serif'] = ['SimHei']
provines = list(workbook)
rank = workbook.index[-2]
#core = ['s','*','+','h','.','x']
core = ['#f47920','#f05b72','#2a5caa','#840228','#b7704f','k']
areas = ['东北','华北','西北','东南','西南','华中']
labels = dict(zip(areas,core))
k = 0

#%%----------单独绘制图例---------------
for m in areas:
    plt.plot(0,0,label = m,color = labels[m], linestyle = "--", marker='.')    #设置绘图曲线参数
    k = + 1
    
#%%-----------绘制31个省份的折线图--------------------------
font = {'family':'SimHei',"color": labels[area1],'weight':'normal','size':16}
for i in provines:    
    x = workbook.index[:-2] + workbook[i][rank]*10
    y = workbook[i][:-2]
    area1 = workbook[i]["片区"]
    
    plt.plot(x,y,color = labels[area1], linestyle = "--", marker='.')
    plt.xticks([])
    plt.xlim(2010.5,2335.5)                                                    #限制绘图区域
    plt.ylim(0.53,0.8)
    plt.ylabel("D", fontsize = 13)
    #以下是标注文字
    yy = y.iloc[-1]
    xx = list(x)[-5]
    plt.text(xx, yy+0.006, i, fontdict = font)

#%%--------------填充底色---------------------
plt.fill_between(np.arange(2000,2390),0.6,0.7,color="r",alpha = .1, linewidth=0.1)
plt.fill_between(np.arange(2000,2390),0.7,0.8,color="g",alpha = .2, linewidth=0)
plt.fill_between(np.arange(2000,2390),0.5,0.6,color="g",alpha = .1, linewidth=0)
plt.text(2020,0.54,'勉强耦合协调', fontsize=15, color='k')
plt.text(2020,0.67,'初级耦合协调', fontsize=15, color='k')
plt.text(2020,0.75,'中级耦合协调', fontsize=15, color='k')
plt.legend(loc='best', frameon=False, ncol=12, fontsize = 16.5)

#获取当前图表属性
ax=plt.gca()                                                                    #超级有用,相比用subplots才能得到ax,plt这个对单个图来说太友好了
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

#修改图表边缘大小,删除百边
plt.subplots_adjust(top=0.96,
bottom=0.005,
left=0.045,
right=0.98,
hspace=0.2,
wspace=0.2)

柱状图+折线图(共轴)(删除特定区域)

在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created on Mon Mar 28 10:10:57 2022
绘制耦合协调度的程序
@author: hp
"""

# -*- coding: utf-8 -*-


import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(1)
workbook=pd.read_excel(r"E:\a毕业设计\3-程序\subsystems_levels.xlsx",encoding='gbk',index_col='省份')

provins = ['辽宁','吉林','黑龙江','上海','浙江','江苏','广东','福建','海南','北京','天津','山东','山西','河北','河南','安徽','江西','湖南','湖北','内蒙古','宁夏','青海','陕西','甘肃','新疆','重庆','贵州','广西','云南','四川','西藏']
plt.rcParams['font.sans-serif']=['SimHei']
fig, axes = plt.subplots(nrows=6, ncols=6, sharex = 'all', sharey = 'all' )
fig.delaxes(axes[0,3])
fig.delaxes(axes[0,4])
fig.delaxes(axes[0,5])
fig.delaxes(axes[3,4])
fig.delaxes(axes[3,5])




yy = np.zeros([11,12])
for i in range(11):   
    yy[i:] = np.zeros(12)+i*0.1
xx = np.arange(2010,2022)

pic = [3,6,6,4,6,6]         #便于定位换行
k = -1
alph = .3
for i in range(36):
    m = int(i/6)    #表示第几行
    n = (i+1)%6     #表示第几列
    if n == 0:
            j = 6
    else:
            j = n   #判断边界
    if j <= pic[m]: #表示可以绘制
        k = k + 1
        provins_name = provins[k]
        workbook2 = workbook.loc[provins_name]
        
        #%% 绘制折线图和颜色背景
        y=workbook2["D"]
        x = workbook2["年份"]
        ax = axes[m,j-1]
        
        ax.fill_between(xx, yy[0], yy[1], alpha=alph, linewidth=0)
        ax.fill_between(xx, yy[1], yy[2], alpha=alph, linewidth=0)
        ax.fill_between(xx, yy[2], yy[3], alpha=alph, linewidth=0)
        ax.fill_between(xx, yy[3], yy[4], alpha=alph, linewidth=0)
        ax.fill_between(xx, yy[4], yy[5], alpha=alph, linewidth=1)
        ax.fill_between(xx, yy[5], yy[6], alpha=alph, linewidth=0)
        ax.fill_between(xx, yy[6], yy[7], alpha=alph, linewidth=0)
        ax.fill_between(xx, yy[7], yy[8], alpha=alph, linewidth=0)
        ax.fill_between(xx, yy[8], yy[9], alpha=alph, linewidth=0)
        ax.fill_between(xx, yy[9], yy[10],alpha=alph, linewidth=0)
        #%% 绘制柱状图
        y_bar1 = workbook2["Uw"]
        y_bar2 = workbook2["Us"]
        y_bar3 = workbook2["Ue"]
          
        bar_width=0.25    
        ax.bar(x-bar_width,y_bar1,bar_width,color="#3CC4A9",label="Uw")
        ax.bar(x,y_bar2,bar_width,align="center",color="#614DB3",label='Us')
        ax.bar(x+bar_width,y_bar3,bar_width,color='#FF4500',label='Ue')
        ax.set_xticks(np.arange(2011,2021,1))
        ax.set_title(provins_name,fontsize = 15)
        #ax.set_xlabel("年份",fontsize=9)
        #ax.set_ylabel("数值",fontsize=9)
        ax.plot(x,y,'k-',label="耦合协调度D") 
        ax.spines['right'].set_visible(False) # 去掉边框
        ax.spines['top'].set_visible(False)   # 去掉边框
        #plt.subplots_adjust(wspace=0.3,hspace=0.7)
        plt.legend(loc='upper right', frameon=False, ncol=4)
        plt.rcParams['xtick.direction'] = 'in'
        plt.rcParams['ytick.direction'] = 'in'
        plt.ylim(0.2,0.8)
        plt.xlim(2010.5,2020.5)
        plt.xticks(fontsize = 12)
        plt.yticks(fontsize = 12)

        
        plt.subplots_adjust(top=0.962,
bottom=0.037,
left=0.025,
right=0.992,
hspace=0.291,
wspace=0.015)
        plt.show()
        # if j==3 and m==0 :
        #     ax.legend(loc='upper right', frameon=False, ncol=4)
    


# make data


    #plt.legend()
       

折线图(共轴)

在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created on Wed Mar 30 09:28:53 2022
绘制折线图
共轴
@author: hp
"""

# -*- coding: utf-8 -*-


from matplotlib.ticker import MultipleLocator, FormatStrFormatter
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
name = 'Us'
np.random.seed(1)
workbook=pd.read_excel(r"E:\a毕业设计\3-程序\2-subsystems_level.xlsx",encoding='gbk',index_col='省份')
#areas = list(set(workbook.index))
areas = ['西北','华北','东北','西南','华中','东南']
plt.rcParams['font.sans-serif']=['SimHei']
fig, axes = plt.subplots(nrows=2, ncols=3, sharex = 'all', sharey = 'all')



alph = .3
for i in range(6):     
    k = i+1
    m = int(i/3)
    n = (i+1)%3
    if n == 0:
        j = 3
    else:
        j = n
        
    ax = axes[m,j-1]
        
    workbook2 = workbook.loc[areas[i]]
    #print(areas[i])
    area_provins = list(set(workbook2["省份"]))
    n = np.size(area_provins)
    workbook2.index = workbook2["省份"]
    # singel area
    for b in range(n):
        workbook3 = workbook2.loc[area_provins[b]]
        

        #%% 绘制折线图
        y=workbook3[name]
        x = workbook3["年份"]
        ax.plot(x,y,'*-',label=area_provins[b])
        
        if m == 1:       
            ax.set_xlabel("年份",fontsize=9)
        if j-1 == 0:
            ax.set_ylabel(name + " 数值",fontsize=9)
       
        #if j-1 == 2:
         #   ax1 = ax.twinx()


#%%   调整绘图参数
    #ax.spines['right'].set_visible(False) # 去掉边框
    #ax.spines['top'].set_v0isible(False)   # 去掉边框
    # 设置副刻度线
    ax.set_title('('+str(i+1)+') '+areas[i])
    ax.legend(loc='upper left', frameon=False, ncol=5)
    ymajorLocator   = MultipleLocator(1)
    ax.yaxis.set_major_locator(ymajorLocator)
    yminorLocator   = MultipleLocator(0.025)
    ax.yaxis.set_minor_locator(yminorLocator)
    

    plt.rcParams['xtick.direction'] = 'in'
    plt.rcParams['ytick.direction'] = 'in'
    plt.ylim(0.15,0.85,0.05)
    plt.yticks(np.arange(0.2,0.85,0.05))
    plt.xticks(np.arange(2010,2021,1))
    plt.xlim(2010.5,2020.5)
    plt.subplots_adjust(top=0.969,
bottom=0.067,
left=0.064,
right=0.944,
hspace=0.00,
wspace=0)
    
    plt.show()
    


# make data


    #plt.legend()
       


重叠柱状图

在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created on Mon Mar 15 19:28:37 2021

@author: hp
"""


import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
workbook1=pd.read_excel(r"E:\a毕业设计\4-开始写论文了\2-图\multi_bar.xlsx",encoding='gbk',index_col='省份')

x = workbook1.index
index_name = list(workbook1)

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

font=11
num = [3,4,3]
k = 0
for j in range(3):
    n = num[j]
    fig, axs = plt.subplots(nrows = n, ncols = 1, sharex = 'all', figsize=(10,1.5*n))
    for i in range(n):    
        y1=workbook1[index_name[k]]
        y2=workbook1[index_name[k+1]]
        y3=workbook1[index_name[k+2]]
        print(index_name[k],index_name[k+1],index_name[k+2])
        ax = axs[i]

        bar_width=0.25    
        plt.rcParams['xtick.direction'] = 'in'
        plt.subplots_adjust(left=None,bottom=None,right=None,top=None)
        plt.subplots_adjust(wspace=0.3,hspace=0.7)

        ax.bar(x,y1,bar_width,color="w",alpha=1,edgecolor='red',linewidth=1.5,label="2010年")
        ax.bar(x,y2,bar_width,align="center",color="w",alpha=0.6,edgecolor='black',linewidth=1.5,label='2016年')
        ax.bar(x,y3,bar_width,color='w',alpha=0.4,edgecolor='blue',linewidth=1.5,label='2020年')
        ax.plot(x,y1,'red',alpha = 0.5)
        ax.plot(x,y2,'black',alpha = 0.5)
        ax.plot(x,y3,'blue',alpha = 0.5)
        
        plt.xticks(size=font,rotation = 290)
        plt.yticks(fontproperties = 'Times New Roman', size=font)
        plt.tick_params(bottom=False,top=False,left=True,right=False)

        ax.set_ylabel(index_name[k][:-1]+'得分', size=font) 
        print(index_name[k][:-1])
        plt.subplots_adjust(top=0.915,
    bottom=0.18,
    left=0.075,
    right=0.97,
    hspace=0.0,
    wspace=0.3)
        if i == 0:
            ax.legend(loc='best', frameon=False, ncol=font, prop = {'size':font-1.5})
            
        k = k + 3
        print(j,k)
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

美滋滋(你猜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值