简说Python,号主老表,Python终身学习者,数据分析爱好者,从18年开始分享Python知识,原创文章227篇,写过Python、SQL、Excel入门文章,也写过Web开发、数据分析文章,老表还总结整理了一份2022Python学习资料和电子书资源,关注后私信回复:2022 即可领取。
纵向柱形图(按升序排列)
# 解决部分 jupyter notebook 中出图不成功 %matplotlib inline # 导入相关库 import numpy as np import matplotlib.pyplot as plt # 解决中文乱码 plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示负号 plt.rcParams['axes.unicode_minus'] = False # 字体 TNR = {'fontname':'Times New Roman'} Fs = {'fontname':'Fangsong'} # 设置画布大小 plt.figure(figsize=(12,6)) figure,axes = plt.subplots(1,1,figsize = (12,6),dpi = 1000) data = [100, 130, 169, 220, 286, 372, 484, 629, 818, 1063, 1382, 1797] labels = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"] # 数据顺序反转 # data.reverse() # 标签顺序反转 # labels.reverse() N = 12 x = np.arange(N) # 自定义每根柱子的颜色 colors = ["#4E79A7", "#A0CBE8", "#F28E2B", "#FFBE7D", "#59A14F", "#8CD17D", "#B6992D", "#F1CE63", "#499894", "#86BCB6", "#E15759", "#E19D9A"] # 颜色顺序反转 # colors.reverse() # 绘制纵向柱形图 plt.bar(range(len(data)), data, tick_label=labels,color = colors) # plt.barh(range(len(data)), data, tick_label=labels,color = colors) # 添加大标题 plt.title("2021年各月份销售业绩(万元)",fontsize=20,**Fs) # 给X轴定义标签 # plt.xlabel("月份",fontsize=15) # 给Y轴定义标签 # plt.ylabel("销售额(万元)",fontsize=15) # 依次给每根柱子添加数据标签,并把字体设置为新罗马体(教科书、论文的数字、公式一般都用新罗马体) for i,j in zip(x, data): plt.text(i, j+0.05, '%.0f' % j, ha='center', va= 'bottom',fontsize=15,**TNR) # 为了美观,不显示画布的黑色边框 [axes.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','bottom','left']] # 不显示Y轴坐标 axes.set_yticks([]) # 输出为矢量图,不管放大或缩小,图形皆不会失真 plt.savefig(r"C:\Users\Administrator\Desktop\test.svg", format="svg") # 输出为常规的png格式 plt.savefig(r"C:\Users\Administrator\Desktop\test.png", format="png") # 输出为常规的jpg格式 plt.savefig(r"C:\Users\Administrator\Desktop\test.jpg", format="png") # 绘图 plt.show()
<Figure size 864x432 with 0 Axes>
纵向柱形图(类别与数据标签反转,按降序排列)
# 解决部分 jupyter notebook 中出图不成功 %matplotlib inline # 导入相关库 import numpy as np import matplotlib.pyplot as plt # 解决中文乱码 plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示负号 plt.rcParams['axes.unicode_minus'] = False # 字体 TNR = {'fontname':'Times New Roman'} Fs = {'fontname':'Fangsong'} # 设置画布大小 plt.figure(figsize=(12,6)) figure,axes = plt.subplots(1,1,figsize = (12,6),dpi = 1000) data = [100, 130, 169, 220, 286, 372, 484, 629, 818, 1063, 1382, 1797] labels = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"] # 数据顺序反转 data.reverse() # 标签顺序反转 labels.reverse() N = 12 x = np.arange(N) # 自定义每根柱子的颜色 colors = ["#4E79A7", "#A0CBE8", "#F28E2B", "#FFBE7D", "#59A14F", "#8CD17D", "#B6992D", "#F1CE63", "#499894", "#86BCB6", "#E15759", "#E19D9A"] # 颜色顺序反转 # colors.reverse() # 绘制纵向柱形图 plt.bar(range(len(data)), data, tick_label=labels,color = colors) # plt.barh(range(len(data)), data, tick_label=labels,color = colors) # 添加大标题 plt.title("2021年各月份销售业绩(万元)",fontsize=20,**Fs) # 给X轴定义标签 # plt.xlabel("月份",fontsize=15) # 给Y轴定义标签 # plt.ylabel("销售额(万元)",fontsize=15) # 依次给每根柱子添加数据标签,并把字体设置为新罗马体(教科书、论文的数字、公式一般都用新罗马体) for i,j in zip(x, data): plt.text(i, j+0.05, '%.0f' % j, ha='center', va= 'bottom',fontsize=15,**TNR) # 为了美观,不显示画布的黑色边框 [axes.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','bottom','left']] # 不显示Y轴坐标 axes.set_yticks([]) # 输出为矢量图,不管放大或缩小,图形皆不会失真 plt.savefig(r"C:\Users\Administrator\Desktop\test.svg", format="svg") # 输出为常规的png格式 plt.savefig(r"C:\Users\Administrator\Desktop\test.png", format="png") # 输出为常规的jpg格式 plt.savefig(r"C:\Users\Administrator\Desktop\test.jpg", format="png") # 绘图 plt.show()
<Figure size 864x432 with 0 Axes>
纵向柱形图(类别与数据标签反转,按降序排列,颜色编码也反转)
# 解决部分 jupyter notebook 中出图不成功 %matplotlib inline # 导入相关库 import numpy as np import matplotlib.pyplot as plt # 解决中文乱码 plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示负号 plt.rcParams['axes.unicode_minus'] = False # 字体 TNR = {'fontname':'Times New Roman'} Fs = {'fontname':'Fangsong'} # 设置画布大小 plt.figure(figsize=(12,6)) figure,axes = plt.subplots(1,1,figsize = (12,6),dpi = 1000) data = [100, 130, 169, 220, 286, 372, 484, 629, 818, 1063, 1382, 1797] labels = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"] # 数据顺序反转 data.reverse() # 标签顺序反转 labels.reverse() N = 12 x = np.arange(N) # 自定义每根柱子的颜色 colors = ["#4E79A7", "#A0CBE8", "#F28E2B", "#FFBE7D", "#59A14F", "#8CD17D", "#B6992D", "#F1CE63", "#499894", "#86BCB6", "#E15759", "#E19D9A"] # 颜色顺序反转 colors.reverse() # 绘制纵向柱形图 plt.bar(range(len(data)), data, tick_label=labels,color = colors) # plt.barh(range(len(data)), data, tick_label=labels,color = colors) # 添加大标题 plt.title("2021年各月份销售业绩(万元)",fontsize=20,**Fs) # 给X轴定义标签 # plt.xlabel("月份",fontsize=15) # 给Y轴定义标签 # plt.ylabel("销售额(万元)",fontsize=15) # 依次给每根柱子添加数据标签,并把字体设置为新罗马体(教科书、论文的数字、公式一般都用新罗马体) for i,j in zip(x, data): plt.text(i, j+0.05, '%.0f' % j, ha='center', va= 'bottom',fontsize=15,**TNR) # 为了美观,不显示画布的黑色边框 [axes.spines[loc_axis].set_visible(False) for loc_axis in ['top','right','bottom','left']] # 不显示Y轴坐标 axes.set_yticks([]) # 输出为矢量图,不管放大或缩小,图形皆不会失真 plt.savefig(r"C:\Users\Administrator\Desktop\test.svg", format="svg") # 输出为常规的png格式 plt.savefig(r"C:\Users\Administrator\Desktop\test.png", format="png") # 输出为常规的jpg格式 plt.savefig(r"C:\Users\Administrator\Desktop\test.jpg", format="png") # 绘图 plt.show()
<Figure size 864x432 with 0 Axes>
给纵向柱形图添加网格线
# 解决部分 jupyter notebook 中出图不成功 %matplotlib inline # 导入相关库 import numpy as np import matplotlib.pyplot as plt # 解决中文乱码 plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示负号 plt.rcParams['axes.unicode_minus'] = False # 字体 TNR = {'fontname':'Times New Roman'} Fs = {'fontname':'Fangsong'} # 设置画布大小 plt.figure(figsize=(12,6)) figure,axes = plt.subplots(1,1,figsize = (12,6),dpi = 1000) data = [100, 130, 169, 220, 286, 372, 484, 629, 818, 1063, 1382, 1797] labels = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"] # 数据顺序反转 # data.reverse() # 标签顺序反转 # labels.reverse() N = 12 x = np.arange(N) # 自定义每根柱子的颜色 colors = ["#4E79A7", "#A0CBE8", "#F28E2B", "#FFBE7D", "#59A14F", "#8CD17D", "#B6992D", "#F1CE63", "#499894", "#86BCB6", "#E15759", "#E19D9A"] # 颜色顺序反转 # colors.reverse() # 绘制纵向柱形图 plt.bar(range(len(data)), data, tick_label=labels,color = colors) # plt.barh(range(len(data)), data, tick_label=labels,color = colors) # 添加大标题 plt.title("2021年各月份销售业绩(万元)",fontsize=20,**Fs) # 给X轴定义标签 # plt.xlabel("月份",fontsize=15) # 给Y轴定义标签 # plt.ylabel("销售额(万元)",fontsize=15) # 依次给每根柱子添加数据标签,并把字体设置为新罗马体(教科书、论文的数字、公式一般都用新罗马体) for i,j in zip(x, data): plt.text(i, j+0.05, '%.0f' % j, ha='center', va= 'bottom',fontsize=15,**TNR) # 为了美观,不显示画布的黑色边框 [axes.spines[loc_axis].set_visible(False) for loc_axis in ["top","bottom","left","right"]] # 不显示Y轴坐标 axes.set_yticks([]) # 输出为矢量图,不管放大或缩小,图形皆不会失真 plt.savefig(r"C:\Users\Administrator\Desktop\test.svg", format = "svg") # 输出为常规的png格式 plt.savefig(r"C:\Users\Administrator\Desktop\test.png", format = "png") # 输出为常规的jpg格式 plt.savefig(r"C:\Users\Administrator\Desktop\test.jpg", format = "png") # 添加网格 plt.grid(axis = "y") # 自定义网格线形状 plt.grid(c = "gold") # 定义网格线的线型和线宽,jupyter notebook 有提示 # '-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted' plt.grid(linestyle = "dotted", linewidth = 0.5) # 绘图 plt.show()
<Figure size 864x432 with 0 Axes>
横向柱形图
# 导入相关的包 import numpy as np import matplotlib.pyplot as plt # 解决中文乱码 plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示负号 plt.rcParams['axes.unicode_minus'] = False # 字体 TNR = {'fontname':'Times New Roman'} HP = {'fontname':'STHUPO'} # 自定义每根柱子的颜色 colors = ["#4E79A7", "#A0CBE8", "#F28E2B", "#FFBE7D", "#59A14F", "#8CD17D", "#B6992D", "#F1CE63", "#499894", "#86BCB6", "#E15759", "#E19D9A"] # 设置画布大小 figure,axes = plt.subplots(1,1,figsize = (12,10),dpi = 80) data_h = [100, 130, 169, 220, 286, 372, 484, 629, 818, 1063, 1382, 1797] lable_h = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"] # 依次给每根柱子添加数据标签,并把字体设置为新罗马体(教科书、论文的数字、公式一般都用新罗马体) N = len(data_h) x = np.arange(N) for i,j in zip(x, data_h): plt.text(j+50, i+0.1, "%s" %j, ha='center', va = "top",fontsize = 15,**TNR) # 数据顺序反转 # data_h.reverse() # 标签顺序反转 # lable_h.reverse() # 颜色顺序反转 # colors.reverse() # 为了美观,不显示画布的黑色边框 [axes.spines[loc_axis].set_visible(False) for loc_axis in ["top","bottom","left","right"]] # 添加大标题 plt.title("2021年各月份销售业绩(万元)",fontsize = 28,**HP) # 添加网格 # plt.grid(axis = "x") plt.barh(x, data_h, height = 0.7, tick_label=lable_h,color = colors) # 输出为矢量图,不管放大或缩小,图形皆不会失真 plt.savefig(r"C:\Users\Administrator\Desktop\test.svg", format="svg") # 输出为常规的png格式 plt.savefig(r"C:\Users\Administrator\Desktop\test.png", format="png") # 输出为常规的jpg格式 plt.savefig(r"C:\Users\Administrator\Desktop\test.jpg", format="png") plt.show()
默认生成的饼图
# 解决部分 jupyter notebook 中出图不成功 %matplotlib inline # 导入相关库 import numpy as np import matplotlib.pyplot as plt # 解决中文乱码 plt.rcParams['font.sans-serif'] = ["Fangsong"] # 显示负号 plt.rcParams['axes.unicode_minus'] = False # 设置画布大小 plt.figure(figsize=(12,6)) figure,axes = plt.subplots(1,1,figsize = (6,6),dpi = 120) # 构造数据 y = [100, 130, 169, 220, 286, 372, 484, 629, 818, 1063, 1382, 1797] label=["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"] # 绘图 plt.pie(y,labels=label) # 添加大标题,并设置字号大小,以及定义所用字体 plt.title("各月份销售占比",fontsize = 28) # 输出为矢量图,不管放大或缩小,图形皆不会失真 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.svg", format="svg") # 输出为常规的png格式 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.png", format="png") # 输出为常规的jpg格式 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.jpg", format="png") # 可视化呈现 plt.show()
<Figure size 864x432 with 0 Axes>
自定义配色的饼图
# 解决部分 jupyter notebook 中出图不成功 %matplotlib inline # 导入相关库 import numpy as np import matplotlib.pyplot as plt # 解决中文乱码 plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示负号 plt.rcParams['axes.unicode_minus'] = False # 字体 TNR = {'fontname':'Times New Roman'} Fs = {'fontname':'Fangsong'} # 设置画布大小 plt.figure(figsize=(15,6)) figure,axes = plt.subplots(1,1,figsize = (15,6),dpi = 120) y = [100, 130, 169, 220, 286, 372, 484, 629, 818, 1063, 1382, 1797] label=["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"] # 设置饼图标签 # 数据顺序反转 y.reverse() # 标签顺序反转 label.reverse() # 自定义饼图各扇区的颜色 colors=["#4E79A7", "#A0CBE8", "#F28E2B", "#FFBE7D", "#59A14F", "#8CD17D", "#B6992D", "#F1CE63", "#499894", "#86BCB6", "#E15759", "#E19D9A"] plt.pie(y, labels=label, # 设置分组类别标签 colors = colors, #自定义每个扇区的颜色 # explode=(0, 0.2, 0, 0,0,0, 0,0,0, 0,0,0), # 让比值较大的扇区炸裂开来,占比越大,距离圆心越远 autopct='%.2f%%', # 让标签以百分比形式显示,且精确到两位小数 labeldistance = 1.1, # 分组名称标签相对圆心的距离位置 pctdistance = 0.9, # 数值标签相对圆心的距离位置 # shadow = True, # 添加阴影 radius = 1, # 饼图的相对半径 startangle = 90, # 绘图的起始角度 counterclock = False # 时针方向 ) # 添加大标题,并设置字号大小,以及定义所用字体 plt.title("各月份销售占比",fontsize = 28,**HP) # 输出为矢量图,不管放大或缩小,图形皆不会失真 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.svg", format="svg") # 输出为常规的png格式 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.png", format="png") # 输出为常规的jpg格式 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.jpg", format="png") # 绘图 plt.show()
<Figure size 1080x432 with 0 Axes>
调整角度的饼图
# 解决部分 jupyter notebook 中出图不成功 %matplotlib inline # 导入相关库 import numpy as np import matplotlib.pyplot as plt # 解决中文乱码 plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示负号 plt.rcParams['axes.unicode_minus'] = False # 字体 TNR = {'fontname':'Times New Roman'} Fs = {'fontname':'Fangsong'} # 设置画布大小 plt.figure(figsize=(12,6)) figure,axes = plt.subplots(1,1,figsize = (6,6),dpi = 120) y = [100, 130, 169, 220, 286, 372, 484, 629, 818, 1063, 1382, 1797] label=["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"] # 设置饼图标签 # 数据顺序反转 y.reverse() # 标签顺序反转 label.reverse() # 自定义饼图各扇区的颜色 colors=["#4E79A7", "#A0CBE8", "#F28E2B", "#FFBE7D", "#59A14F", "#8CD17D", "#B6992D", "#F1CE63", "#499894", "#86BCB6", "#E15759", "#E19D9A"] plt.pie(y, labels=label, # 设置分组类别标签 colors = colors, #自定义每个扇区的颜色 # explode=(0, 0.2, 0, 0,0,0, 0,0,0, 0,0,0), # 让比值较大的扇区炸裂开来,占比越大,距离圆心越远 autopct='%.2f%%', # 让标签以百分比形式显示,且精确到两位小数 labeldistance = 1.1, # 分组名称标签相对圆心的距离位置 pctdistance = 0.9, # 数值标签相对圆心的距离位置 # shadow = True, # 添加阴影 radius = 1, # 饼图的相对半径 startangle = 90, # 绘图的起始角度 # counterclock = False # 时针方向 ) # 添加大标题,并设置字号大小,以及定义所用字体 plt.title("各月份销售占比",fontsize = 28,**HP) # 输出为矢量图,不管放大或缩小,图形皆不会失真 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.svg", format="svg") # 输出为常规的png格式 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.png", format="png") # 输出为常规的jpg格式 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.jpg", format="png") # 绘图 plt.show()
<Figure size 864x432 with 0 Axes>
调整角度让标签可以在内部不重叠显示的饼图
# 解决部分 jupyter notebook 中出图不成功 %matplotlib inline # 导入相关库 import numpy as np import matplotlib.pyplot as plt # 解决中文乱码 plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示负号 plt.rcParams['axes.unicode_minus'] = False # 字体 TNR = {'fontname':'Times New Roman'} Fs = {'fontname':'Fangsong'} # 设置画布大小 plt.figure(figsize=(12,6)) figure,axes = plt.subplots(1,1,figsize = (6,6),dpi = 120) y = [100, 130, 169, 220, 286, 372, 484, 629, 818, 1063, 1382, 1797] label=["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"] # 设置饼图标签 # 数据顺序反转 y.reverse() # 标签顺序反转 label.reverse() # 自定义饼图各扇区的颜色 colors=["#4E79A7", "#A0CBE8", "#F28E2B", "#FFBE7D", "#59A14F", "#8CD17D", "#B6992D", "#F1CE63", "#499894", "#86BCB6", "#E15759", "#E19D9A"] plt.pie(y, labels=label, # 设置分组类别标签 colors = colors, #自定义每个扇区的颜色 # explode=(0, 0.2, 0, 0,0,0, 0,0,0, 0,0,0), # 让比值较大的扇区炸裂开来,占比越大,距离圆心越远 autopct='%.2f%%', # 让标签以百分比形式显示,且精确到两位小数 labeldistance = 1.1, # 分组名称标签相对圆心的距离位置 pctdistance = 0.9, # 数值标签相对圆心的距离位置 # shadow = True, # 添加阴影 radius = 1, # 饼图的相对半径 startangle = 180, # 绘图的起始角度 # counterclock = False # 时针方向 ) # 添加大标题,并设置字号大小,以及定义所用字体 plt.title("各月份销售占比",fontsize = 28,**HP) # 输出为矢量图,不管放大或缩小,图形皆不会失真 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.svg", format="svg") # 输出为常规的png格式 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.png", format="png") # 输出为常规的jpg格式 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.jpg", format="png") # 绘图 plt.show()
<Figure size 864x432 with 0 Axes>
炸裂出来的饼图
# 解决部分 jupyter notebook 中出图不成功 %matplotlib inline # 导入相关库 import numpy as np import matplotlib.pyplot as plt # 解决中文乱码 plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示负号 plt.rcParams['axes.unicode_minus'] = False # 字体 TNR = {'fontname':'Times New Roman'} Fs = {'fontname':'Fangsong'} # 设置画布大小 plt.figure(figsize=(12,6)) figure,axes = plt.subplots(1,1,figsize = (6,6),dpi = 120) # 构造数据 y = [100, 130, 169, 220, 286, 372, 484, 629, 818, 1063, 1382, 1797] label=["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"] # 数据顺序反转 y.reverse() # 标签顺序反转 label.reverse() # 自定义饼图各扇区的颜色 colors=["#4E79A7", "#A0CBE8", "#F28E2B", "#FFBE7D", "#59A14F", "#8CD17D", "#B6992D", "#F1CE63", "#499894", "#86BCB6", "#E15759", "#E19D9A"] # 开始绘图 plt.pie(y, labels=label, # 设置分组类别标签 colors = colors, #自定义每个扇区的颜色 explode=(0.2, 0.1, 0, 0,0,0, 0,0,0, 0,0,0), # 让比值较大的扇区炸裂开来,占比越大,距离圆心越远 autopct='%.2f%%', # 让标签以百分比形式显示,且精确到两位小数 labeldistance = 1.1, # 分组名称标签相对圆心的距离位置 pctdistance = 0.9, # 数值标签相对圆心的距离位置 # shadow = True, # 添加阴影 radius = 1, # 饼图的相对半径 startangle = 90, # 绘图的起始角度 counterclock = False # 时针方向 ) # 添加大标题,并设置字号大小,以及定义所用字体 plt.title("各月份销售占比",fontsize = 28,**HP) # 输出为矢量图,不管放大或缩小,图形皆不会失真 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.svg", format="svg") # 输出为常规的png格式 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.png", format="png") # 输出为常规的jpg格式 plt.savefig(r"C:\Users\Administrator\Desktop\matplotlib饼图.jpg", format="png") # 可视化呈现 plt.show()
<Figure size 864x432 with 0 Axes>