• 没看到很好的解决方案，希望有好的方案的在下方提供链接。...import matplotlib.pyplot as plt # Juwairia's data: a = [4,-6,9] b = [2,7,1] c = [3,3,1] d = [4,0,-3] data = np.array([a, b, c, d]) d...
提供一个方案供参考

import numpy as np
import matplotlib.pyplot as plt

# Juwairia's data:
a = [4,-6,9]
b = [2,7,1]
c = [3,3,1]
d = [4,0,-3]
data = np.array([a, b, c, d])

data_shape = np.shape(data)

# Take negative and positive data apart and cumulate
def get_cumulated_array(data, **kwargs):
cum = data.clip(**kwargs)
cum = np.cumsum(cum, axis=0)
d = np.zeros(np.shape(data))
d[1:] = cum[:-1]
return d

cumulated_data = get_cumulated_array(data, min=0)
cumulated_data_neg = get_cumulated_array(data, max=0)

# Re-merge negative and positive data.
data_stack = cumulated_data

cols = ["g", "y", "b", "c"]

fig = plt.figure()
ax = plt.subplot(111)

for i in np.arange(0, data_shape[0]):
ax.bar(np.arange(data_shape[1]), data[i], bottom=data_stack[i], color=cols[i],)

plt.show()


展开全文
• 引言在查找资料时看到了堆积柱状图，简单明了，而且绘制起来也不是很难，再结合自己的教程推文中也确实没有此类图表，即决定通过构建虚拟数据进行matplotlib堆积柱状图的绘制推文，详细内容如下：PS：如有需要Python...
引言在查找资料时看到了堆积柱状图，简单明了，而且绘制起来也不是很难，再结合自己的教程推文中也确实没有此类图表，即决定通过构建虚拟数据进行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:DataCharmSCI paper plotssci_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:DataCharmSCI paper plotssci_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:DataCharmSCI paper plotssci_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，作者宁海涛
展开全文
• matplotlib柱状图，折线图，饼图 首先导入maplotlib画图函数 impory matplotlib.pyplot as plt 接下来进入主题：
matplotlib画柱状图，折线图，饼图，散点图，误差图，堆积柱状图
首先导入maplotlib画图函数
import matplotlib.pyplot as plt

先在python导入我们的excel数据：

接下来进入主题：
1.柱状图
以上表为例子，我们以姓名为横坐标，工资为纵坐标画出柱状图：
代码如下：
import pandas as pd                      #导入pandas库
import matplotlib.pyplot as plt          #导入画图的库

excel_file = './try.xlsx'               #导入excel数据

"""柱状图"""
plt.rcParams['font.sans-serif'] = ['SimHei']   #可以显示中文
plt.figure(figsize=(10, 6))                    #画图，大小可自己设置
plt.ylabel('工资（元）')                         #横纵坐标的名称设置
plt.xlabel('姓名')
x = data['姓名']                                #横纵坐标的数据导入
y = data['工资']
plt.bar(x, y)                                  #东西放进bar里（当成一个盒子理解）
plt.title('柱状图演示')                          #标题
plt.show()

结果：

2.散点图
"""散点图"""
plt.rcParams['font.sans-serif'] = ['SimHei']     #可以显示中文
fig = plt.subplots(figsize=(10, 6))
x = np.array(data['姓名'])
y = np.array(data['工资'])
plt.scatter(x, y)                                #scatter()函数画散点图
plt.show()

效果入下：

3.折线图
知道条形统计图之后折线其实大同小异：
代码如下：
"""折线图"""
import pandas as pd                      #导入pandas库
import matplotlib.pyplot as plt          #导入画图的库

excel_file = './try.xlsx'               #导入excel数据
plt.rcParams['font.sans-serif'] = ['SimHei']   #可以显示中文
plt.figure(figsize=(10, 6))                    #画图，大小可自己设置
plt.plot(data['姓名'], data['工资'], color='blue', label='线的名称', marker='s') #marker折线形状
plt.legend()                                   #显示图例，这里指显示‘label='线的名称'
plt.ylabel('工资（元）')
plt.show()                                     #显示

效果图简单就不展示了
4.饼图
4.1普通饼图（显示比例）
展示各个部门的经济比例图：
方法很多，我的方法是先把各部门的总工资先计算出来，再画图
画图的关键就是函数plt.pie()
"""饼图"""
import pandas as pd                      #导入pandas库
import matplotlib.pyplot as plt          #导入画图的库

excel_file = './try.xlsx'               #导入excel数据

plt.rcParams['font.sans-serif'] = ['SimHei']   #可以显示中文
plt.figure(figsize=(8, 6))                    #画图，大小可自己设置
bumenshuju = {'部门': ['A', 'B', 'C'],
'部门工资': [sum(data.loc[data['部门'] == 'A', '工资']),
sum(data.loc[data['部门'] == 'B', '工资']),
sum(data.loc[data['部门'] == 'C', '工资'])]}
dataframe_1 = pd.DataFrame(bumenshuju)
# print(dataframe_1)
labels = dataframe_1['部门工资']
x = dataframe_1['部门']
plt.pie(labels, labels=x, autopct='%1.1f%%')
plt.legend('A''B''C')
plt.title('部门的工资分布')
plt.axis('equal')
plt.show()

效果图:

4.2可显示具体数值的饼图
这个难度稍微大一点
代码展示：

"""高级饼图"""
import pandas as pd                      #导入pandas库
import numpy as np
import matplotlib.pyplot as plt

excel_file = './try.xlsx'               #导入excel数据
plt.rcParams['font.sans-serif'] = ['SimHei']                                     #可以显示中文
fig, ax = plt.subplots(figsize=(8, 6), subplot_kw=dict(aspect="equal"))          #画布的基本设置

bumenshuju = {'A部门': sum(data.loc[data['部门'] == 'A', '工资']),             #构建各部门的工资字典，然后转成dataframe表格类型
'B部门': sum(data.loc[data['部门'] == 'B', '工资']),
'C部门': sum(data.loc[data['部门'] == 'C', '工资'])}

data_1 = [bumenshuju[i] for i in bumenshuju.keys()]                         #即工资总数
index = [i for i in bumenshuju.keys()]                                     #部门

def func(pct, allvals):                                                       #返回饼图里显示的一串字符
absolute = int(pct/100.*np.sum(allvals))
return "{:.1f}%\n({:d} 元)".format(pct, absolute)

wedges, texts, autotexts = ax.pie(data_1, autopct=lambda pct: func(pct, data_1),
textprops=dict(color="w"))                                 #设置饼图的东西

ax.legend(wedges, index,                                              #图例的设置，可以自己设置
title="部门",
loc="center left",
bbox_to_anchor=(1, 0, 0.5, 1))

ax.set_title("各个部门工资比例和具体工资总数")                 #标题

plt.show()

效果图如下:

5.散点图
直接上代码，用的表格是一样的
"""散点图"""
plt.rcParams['font.sans-serif'] = ['SimHei']     #可以显示中文
fig = plt.subplots(figsize=(10, 6))
x = np.array(data['姓名'])
y = np.array(data['工资'])
plt.scatter(x, y)                                #scatter()函数画散点图
plt.show()


效果图：

6.误差图
代码如下：
"""绘制误差棒图"""
plt.rcParams['font.sans-serif'] = ['SimHei']                       #可以显示中文
error = []
for i in range(len(data['工资'])):                                  #把误差搞出来，range才能迭代,这里可以看出误差是和均值工资的差距
a = data['工资'][i] - np.sum(data['工资'])/len(data['工资'])
error.append(a)
y = data['工资']
x = data['姓名']
y.plot(yerr=error)
plt.show()

效果图如下：

7.堆积柱状图
其实很简单，注意以什么为底画就好，理解性画图
人狠话不多，直接上图
以下是源数据
博主最近在服装公司实习，要观察各月，各品类较为直观的的变化。
上代码：
import pandas as pd                      #导入pandas库
import matplotlib.pyplot as plt          #导入画图的库
excel_file ='./堆积柱状图.xlsx'

"""堆积柱状图"""
plt.rcParams['font.sans-serif'] = ['SimHei']                       #可以显示中文
d1 = data['T恤']
d2 = data['连衣裙']
d3 = data['套装']
d4 = data['内衣']
d5 = data['内裤']
d6 = data['丝巾']

fig, axs = plt.subplots(1, 1, figsize=(14, 7))   #画一个图就好了

axs.bar(data.index, d1, width=0.4, label='T恤')     #index作横坐标，先画d1
axs.bar(data.index, d2, width=0.4, bottom=d1, label='连衣裙')  #以d1为低画d2
axs.bar(data.index, d3, width=0.4, bottom=d2+d1, label='套装') #以d1+d2为底，画d3
axs.bar(data.index, d4, width=0.4, bottom=d3+d2+d1, label='内衣')   #同理
axs.bar(data.index, d5, width=0.4, bottom=d4+d3+d2+d1, label='内裤')
axs.bar(data.index, d6, width=0.4, bottom=d5+d4+d3+d2+d1, label='丝巾')
axs.set_ylim(0, 12000)        #y轴最高点
axs.set_xticklabels(data.index, rotation=90)

plt.show() #画出来

最后就是上图！

帅气逼格高的堆积柱状图来也，下一次更新讲解如何加数值。
接下来还有matplotlib画的各种图形，会积极更新的，建议收藏


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

在查找资料时看到了堆积柱状图，简单明了，而且绘制起来也不是很难，再结合自己的教程推文中也确实没有此类图表，即决定通过构建虚拟数据进行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，作者宁海涛

展开全文
• matplotlib之堆积柱状图及百分比柱状图

万次阅读 多人点赞 2019-10-01 08:24:17
matplotlib堆积柱状图及百分比柱状图 在博主日常的绘图过程，有一种图也是什么常见的绘图工作，就是堆积的柱状图，其实很简单，就注意几个参数即可。 Here we go! 首先是引入数据库： import matplotlib.pyplot as...
• matplotlib堆积柱状图画法介绍 堆积柱状图可以理解是两个柱状图显示在一个图形中，关键属性就在与bottom这个属性。
• 两层堆积import numpy as npimport matplotlib.pyplot as plty1 = np.array([1,2,3,4])y2 = np.array([1,1,1,1])x = np.array([2009,2010,2011,2012])plt.figure(figsize=(4,4))plt.bar(x, y1, label='a')plt.bar(x,...
• matplotlib创建堆积柱状图比较简单，通过pyplot.bar()函数中bottom函数可以便捷实现。 两组数据 两组数据的堆积柱状图非常简单，直接使用bottom参数即可。 import matplotlib.pyplot as plt labels = ['G1', 'G2',...
• import matplotlib.pyplot as plt import numpy as np bar_data = pd.read_csv('data.csv', header=None) plt.rcParams['font.family'] = "Times New Roman" fig, ax = plt.subplots(figsize=(5, 3), dpi=200) # ...
• 使用matplotlib创建百分比堆积柱状图的思路与堆积柱状图类似，只不过bottom参数累计的不是数值而是百分比，因此，需要事先计算每组柱子的数值总和，进而求百分比。 未使用numpy版本 适用于少量数据，数据结构需要...
• Matplotlib——柱状图条形图包括单数据系列柱状图、多数据系列柱状图、堆积柱状图、百分比柱状图一、matplotlib1、简介Matplotlib 是什么？Matplotlib 是一个 Python 的 2D绘图库，它以各种硬拷贝格式和跨平台的交互...