Python可视化:matplotlib 绘制堆积柱状图绘制

引言

在查找资料时看到了堆积柱状图,简单明了,而且绘制起来也不是很难,再结合自己的教程推文中也确实没有此类图表,即决定通过构建虚拟数据进行matplotlib堆积柱状图的绘制推文,详细内容如下:

PS:如有需要Python学习资料的小伙伴可以加下方的群去找免费管理员领取

 

可以免费领取源码项目实战视频PDF文件

 

数据构建及默认可视化设置

结合此类图表特点,我们构建的数据结果如下:

 

在matplotlib中要想绘制堆积柱状图,则需要灵活设置 ax.bar()绘图函数中bottom参数,先看一下简单的例子:

import matplotlib.pyplot as plt

labels = ['G1', 'G2', 'G3', 'G4', 'G5']
men_means = [20, 35, 30, 35, 27]
women_means = [25, 32, 34, 20, 25]
width = 0.35       # the width of the bars: can also be len(x) sequence
fig, ax = plt.subplots(figsize=(5,3),dpi=200)
ax.bar(labels, men_means, width,label='Men')
ax.bar(labels, women_means, width, bottom=men_means,label='Women')
ax.set_ylabel('Scores')
ax.set_title('Scores by group and gender')
ax.legend()
ax.text(.87,-.08,'\nVisualization by DataCharm',transform = ax.transAxes,
        ha='center', va='center',fontsize = 5,color='black',fontweight='bold',family='Roboto Mono')
plt.savefig(r'F:\DataCharm\SCI paper plots\sci_bar_guanwang',width=5,height=3,
            dpi=900,bbox_inches='tight')
plt.show()

这里women 柱状图时,bottom设置为 men_means ,结果如下:

 

看到这里,对柱状图的堆积应该有了一个较好的理解了吧

回到我们虚构的数据,使用默认的matplotlib参数,代码如下:

plt.rcParams['font.family'] = "Times New Roman"
fig,ax = plt.subplots(figsize=(8,5),dpi=200)

label = [i for i in bar_data.columns[1:]]
mu_number = bar_data.iloc[0,1:].values
ma_number = bar_data.iloc[1,1:].values
en_number = bar_data.iloc[2,1:].values
ch_number = bar_data.iloc[3,1:].values

width = .4

ax.bar(label, mu_number, width, label='Music',color='white',hatch="//",ec='k',lw=.6)
ax.bar(label, ma_number, width,  bottom=mu_number, label='Math',color='gray',ec='k',lw=.6)
ax.bar(label, en_number, width,  bottom=ma_number, label='English',color='white',hatch="...",ec='k',lw=.6)
ax.bar(label, ch_number, width,  bottom=en_number, label='Chinese',color='white',hatch="\\\\",ec='k',lw=.6)
ax.set_ylim(0,120)
ax.tick_params(direction='out',labelsize=12,length=5.5,width=1,top=False,right=False)
ax.legend(fontsize=11,frameon=False,loc='upper center',ncol=4)
ax.set_ylabel('Numbers of Studies',fontsize=13)
ax.set_xlabel('Time(year)',fontsize=13)
text_font = {'size':'17','weight':'bold','color':'black'}
ax.text(.03,.93,"(a)",transform = ax.transAxes,fontdict=text_font,zorder=4)
ax.text(.87,-.08,'\nVisualization by DataCharm',transform = ax.transAxes,
        ha='center', va='center',fontsize = 5,color='black',fontweight='bold',family='Roboto Mono')
plt.savefig(r'F:\DataCharm\SCI paper plots\sci_bar_04.png',width=5,height=3,
            dpi=900,bbox_inches='tight')

结果如下:

 

虽然效果也还不错,但想要达到出版的要求,可能还需要进行定制化需求设置。

可视化定制化设计

要想 达到一般出版社的要求,对其颜色、填充、刻度、轴脊、字体等都需要自行设置,具体代码如下:

plt.rcParams['font.family'] = "Times New Roman"
fig,ax = plt.subplots(figsize=(8,5),dpi=200)

label = [i for i in bar_data.columns[1:]]
mu_number = bar_data.iloc[0,1:].values
ma_number = bar_data.iloc[1,1:].values
en_number = bar_data.iloc[2,1:].values
ch_number = bar_data.iloc[3,1:].values

width = .4

ax.bar(label, mu_number, width, label='Music',color='white',hatch="//",ec='k',lw=.6)
ax.bar(label, ma_number, width,  bottom=mu_number, label='Math',color='gray',ec='k',lw=.6)
ax.bar(label, en_number, width,  bottom=ma_number, label='English',color='white',hatch="...",ec='k',lw=.6)
ax.bar(label, ch_number, width,  bottom=en_number, label='Chinese',color='white',hatch="\\\\",ec='k',lw=.6)
ax.set_ylim(0,120)
ax.tick_params(direction='out',labelsize=12,length=5.5,width=1,top=False,right=False)
ax.legend(fontsize=11,frameon=False,loc='upper center',ncol=4)
ax.set_ylabel('Numbers of Studies',fontsize=13)
ax.set_xlabel('Time(year)',fontsize=13)
text_font = {'size':'17','weight':'bold','color':'black'}
ax.text(.03,.93,"(a)",transform = ax.transAxes,fontdict=text_font,zorder=4)
ax.text(.87,-.08,'\nVisualization by DataCharm',transform = ax.transAxes,
        ha='center', va='center',fontsize = 5,color='black',fontweight='bold',family='Roboto Mono')
plt.savefig(r'F:\DataCharm\SCI paper plots\sci_bar_04.png',width=5,height=3,
            dpi=900,bbox_inches='tight')

结果如下:

有的时候对轴脊的设置也有很严的要求,通过添加如下代码,即可对轴脊进行设置:

for spine in ['bottom','left']:
    ax.spines[spine].set_linewidth(1.5)
    
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

结果如下:

 

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

以上文章来源于DataCharm,作者宁海涛

### 回答1: Matplotlib是一个Python可视化库,用于绘制各种静态、动态、交互式的图表和图形。它提供了一系列的API,可以用于绘制线图、散点图、柱状图、饼图、3D图等等。Matplotlib的优点是易于使用、灵活性高、可扩展性强,同时还有大量的文档和示例可供参考。 ### 回答2: MatplotlibPython中你可以使用的最流行和最强大的可视化库之一。它具有广泛的可视化选项,一些常见的绘图包括线性图、散点图、柱状图、直方图、饼图、热图、轮廓图、等高线图等等。此外,Matplotlib也能够绘制和3D可视化Matplotlib的API简洁、直观。你可以使用Matplotlib创建高质量的图形,充满了自定义选项以及可扩展性。此外,这个库和Python的其他科学计算库非常容易集成。 一些优点包括: - 免费开源,可以使用广泛的图形选项和处理图形的选项; - 允许创建高品质的图形,并包含丰富、观赏性的文本注释和标签; - 可以与Python的科学、数学和统计计算库无缝集成; - 可以保存图形为各种图像格式(如PNG、PDF、SVG和EPS); - 可以创建交互式的图形,例如zoom-in、zoom-out等。 此外,Matplotlib还有许多插件和扩展,可帮助你使使用更加方便。例如是一个使你可以轻松地在Python脚本中集成Plotly图表的Matplotlib扩展接口。 需要注意的是,Matplotlib绘制一些复杂或大数据量的图表,可能需要对计算机硬件进行更多方面的优化,否则可能会影响计算机的性能。 总而言之,Matplotlib是一种强大的Python可视化库,集成广泛且易于使用,拥有许多各种类型的图形模块,方便用户绘制精美的图表和图形。它适用于数据分析和可视化、科学和工程计算、以及各种其他任务。同时,也存在其他强大的可视化库,如Seaborn、Plotly等。 ### 回答3: Python是一门广泛应用于科学计算和数据分析领域的编程语言,而Matplotlib则是Python中最常用的数据可视化库之一。Matplotlib的功能非常强大,可以绘制多种类型的图表,包括线图、散点图、柱状图等。同时,Matplotlib的可定制性也非常强,用户可以对绘制的图表进行各种调整,例如修改颜色、大小、标签和标题等。此外,Matplotlib还支持多种输出格式,包括PNG、PDF、SVG等。 Matplotlib的使用较为简单,只需要在Python中导入Matplotlib库,并调用相应的函数即可。例如,要绘制一个线图,可以使用如下代码: ```python import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.sin(x) plt.plot(x, y) plt.title("Sine Wave") plt.xlabel("x") plt.ylabel("y") plt.show() ``` 上述代码中,通过调用NumPy库生成了一组“x”轴数据和一组“y”轴数据,然后使用Matplotlib的`plot()`函数绘制了一个简单的线图,并通过`title()`、`xlabel()`和`ylabel()`函数设置了图表的标题和轴标签。 Matplotlib不仅支持基本的绘图功能,还支持更高级的绘图技巧,如子图、3D图、动态图等。同时,Matplotlib还兼容多种Python的科学计算库,如NumPy、SciPy、Pandas等,可以方便地将这些库的数据转化为图表进行可视化展示。 总之,Matplotlib的强大功能和扩展性,使其成为Python领域中最常用的可视化库之一,广泛应用于科学研究、数据可视化等多个领域。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值