精品网站建设费用 搜搜磐石网络,北京网页,wordpress 站内搜索,企业 做网站python 绘图 —— 绘制从顶部向底部显示的柱形图[ax.bar()]
效果图如下所示#xff1a; 就是这个样子#xff0c;一般比较少见将柱形图从上往下绘制的。可能是会为了更好的展示数据对比结果吧。这里绘图的主要思路如下#xff1a;
利用ax.twinx()这个函数生成一个新的x轴…python 绘图 —— 绘制从顶部向底部显示的柱形图[ax.bar()]
效果图如下所示 就是这个样子一般比较少见将柱形图从上往下绘制的。可能是会为了更好的展示数据对比结果吧。这里绘图的主要思路如下
利用ax.twinx()这个函数生成一个新的x轴相当于复制了一个x轴使用ax.invert_yaxis()这个函数反转新x轴对应的y轴使其从图中左边0-100排列变成100-0排列这样就保证了图片从顶往底显示的效果手动设置新的y轴的ticklabel使其展现为0-100排列。
具体步骤如下所示
1、首先是生成随机一组数据并绘制柱形图 import numpy as np
import matplotlib.ticker as mticker
import matplotlib.pyplot as plt
###########################################################################
plt.rcParams[font.sans-serif][SimHei]#中文
plt.rcParams[axes.unicode_minus]False #显示负号
# ####################################data#################################
n6
y np.linspace(10,70,n)
y1 np.linspace(10,60,n)
y2 np.linspace(10,50,n)
xnp.linspace(2000,2020,n)data np.array([y,y1,y2])
width 0.6
# ####################################draw#################################
figplt.figure(figsize(5,7),dpi500)#添加画布等
axfig.add_axes([0,0,1,0.3])
ax.set(xlim(2000,2021),ylim(0,100))
bar1ax.bar(x - width,data[0],# colornp.where(y0,r,b), #判断大于0的为红色负的为蓝色width0.5, #柱形宽度aligncenter, #柱形的位置edge/center alpha0.8, #柱形透明度hatch*, #柱形表明的形状样式edgecolork,#柱形边缘颜色bottom0.01 #柱形离底部的距离)
bar2ax.bar(x width,data[1],# colornp.where(y0,r,b), #判断大于0的为红色负的为蓝色width0.5, #柱形宽度aligncenter, #柱形的位置edge/center alpha0.8, #柱形透明度hatch*, #柱形表明的形状样式edgecolork,#柱形边缘颜色bottom0.01 #柱形离底部的距离)
bar3ax.bar(x ,data[2],# colornp.where(y0,r,b), #判断大于0的为红色负的为蓝色width0.5, #柱形宽度aligncenter, #柱形的位置edge/center alpha0.8, #柱形透明度hatch*, #柱形表明的形状样式edgecolork,#柱形边缘颜色bottom0.01 #柱形离底部的距离)
##########################################################################
ax.set(xlim(1999,2021),ylim(0,100)) #设置x、y轴的最大最小范围
ax.set_xticks(np.linspace(2000, 2020, n)) #设置x轴显示的标签 #添加注释
ax.axhline(y0,ck,ls:,lw1) #添加水平线设置颜色位置水平线的style
#设置轴的参数间隔
ax.tick_params(axisboth,whichboth,directionin)
ax.yaxis.set_minor_locator(mticker.MultipleLocator(5))
ax.xaxis.set_minor_locator(mticker.MultipleLocator(5))
# 设置label
ax.set_xlabel(年份 (Year))
ax.set_ylabel(数值 (%) )
ax.set_title(柱状图,fontsize10)2、复制一个新的x轴并生成一组数据绘制柱形图
ax2 ax.twinx()
ax2.set(xlim(1999,2021),ylim(100))
bar4 ax2.bar(x,np.linspace(4,6,n),width0.5, #柱形宽度aligncenter, #柱形的位置edge/center alpha0.8, #柱形透明度hatch*, #柱形表明的形状样式edgecolork,#柱形边缘颜色bottom0.01 , #柱形离底部的距离colorr)
ax2.yaxis.set_minor_locator(mticker.MultipleLocator(5))3、翻转y轴稍微调整一下tick的方向
ax2.invert_yaxis()
ax2.tick_params(axisboth,tickdirin)
ax2.tick_params(whichminor,tickdirin)4、 重新定义ticklabel的值
ax2.set_yticklabels([0,20,40,60,80,100][::-1])以下是全部的代码
# -*- coding: utf-8 -*-Created on Tue Feb 21 14:49:36 2023author: jianpublog : https://blog.csdn.net/weixin_44237337?spm1000.2115.3001.5343email: 211311040008hhu.edu.cnintroduction : keep learning althongh walk slowly
import numpy as np
import matplotlib.ticker as mticker
import matplotlib.pyplot as plt
###########################################################################
plt.rcParams[font.sans-serif][SimHei]#中文
plt.rcParams[axes.unicode_minus]False #显示负号
# ####################################data#################################
n6
y np.linspace(10,70,n)
y1 np.linspace(10,60,n)
y2 np.linspace(10,50,n)
xnp.linspace(2000,2020,n)data np.array([y,y1,y2])
width 0.6
# ####################################draw#################################
figplt.figure(figsize(5,7),dpi500)#添加画布等
axfig.add_axes([0,0,1,0.3])
ax.set(xlim(2000,2021),ylim(0,100))
bar1ax.bar(x - width,data[0],# colornp.where(y0,r,b), #判断大于0的为红色负的为蓝色width0.5, #柱形宽度aligncenter, #柱形的位置edge/center alpha0.8, #柱形透明度hatch*, #柱形表明的形状样式edgecolork,#柱形边缘颜色bottom0.01 #柱形离底部的距离)
bar2ax.bar(x width,data[1],# colornp.where(y0,r,b), #判断大于0的为红色负的为蓝色width0.5, #柱形宽度aligncenter, #柱形的位置edge/center alpha0.8, #柱形透明度hatch*, #柱形表明的形状样式edgecolork,#柱形边缘颜色bottom0.01 #柱形离底部的距离)
bar3ax.bar(x ,data[2],# colornp.where(y0,r,b), #判断大于0的为红色负的为蓝色width0.5, #柱形宽度aligncenter, #柱形的位置edge/center alpha0.8, #柱形透明度hatch*, #柱形表明的形状样式edgecolork,#柱形边缘颜色bottom0.01 #柱形离底部的距离)
##########################################################################
ax.set(xlim(1999,2021),ylim(0,100)) #设置x、y轴的最大最小范围
ax.set_xticks(np.linspace(2000, 2020, n)) #设置x轴显示的标签 #添加注释
ax.axhline(y0,ck,ls:,lw1) #添加水平线设置颜色位置水平线的style
#设置轴的参数间隔
ax.tick_params(axisboth,whichboth,directionin)
ax.yaxis.set_minor_locator(mticker.MultipleLocator(5))
ax.xaxis.set_minor_locator(mticker.MultipleLocator(5))
# 设置label
ax.set_xlabel(年份 (Year))
ax.set_ylabel(数值 (%) )
ax.set_title(柱状图,fontsize10)#添加图例
ax2 ax.twinx()
ax2.invert_yaxis()
ax2.set(xlim(1999,2021),ylim(100))
ax2.set_yticklabels([0,20,40,60,80,100][::-1])
bar4 ax2.bar(x,np.linspace(4,6,n),width0.5, #柱形宽度aligncenter, #柱形的位置edge/center alpha0.8, #柱形透明度hatch*, #柱形表明的形状样式edgecolork,#柱形边缘颜色bottom0.01 , #柱形离底部的距离colorr)
ax2.yaxis.set_minor_locator(mticker.MultipleLocator(5))
ax2.tick_params(axisboth,tickdirin)
ax2.tick_params(whichminor,tickdirin)
ax.legend([bar1,bar2,bar3,bar4],[柱形1,柱形2,柱形3,柱形4])
plt.show()具体代码是按照之前的一个教程修改的绘制正负区分的柱形图[ax.bar()] 欢迎评论或者加我交流分享更简单的绘制方法~