python绘制柱形图系列

2024-02-08 02:10
文章标签 python 系列 绘制 柱形图

本文主要是介绍python绘制柱形图系列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Python版本为:3.7.1;图表绘制包matplotlib、Seaborn、plotnine的版本分别为:2.2.3、0.9.0、0.5.1;数据处理包NumPy和Pandas的版本分别为:1.15.4和0.23.4。

1、matplotlib

from matplotlib import cm,colors
from matplotlib import pyplot as plt
from matplotlib.pyplot import figure, show, rc
import numpy as np
import pandas as pd
#%matplotlib inline                   
plt.rcParams["font.sans-serif"]='SimHei'   #解决中文乱码问题
plt.rcParams['axes.unicode_minus']=False   #解决负号无法显示的问题
plt.rc('axes',axisbelow=True)  
#-----------------------(a) 单数剧系列柱形图-------------------------------------------- 
mydata=pd.DataFrame({'Cut':["Fair","Good","Very Good","Premium","Ideal"],'Price':[4300,3800,3950,4700,3500]})Sort_data=mydata.sort_values(by='Price', ascending=False)fig=plt.figure(figsize=(6,7),dpi=70)
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)
plt.grid(axis="y",c=(217/256,217/256,217/256))         #设置网格线   ax = plt.gca()#获取边框
ax.spines['top'].set_color('none')  # 设置上‘脊梁’为红色
ax.spines['right'].set_color('none')  # 设置上‘脊梁’为无色
ax.spines['left'].set_color('none')  # 设置上‘脊梁’为无色plt.bar(Sort_data['Cut'],Sort_data['Price'],width=0.6,align="center",label="Cut")plt.ylim(0,6000) #设定x轴范围
plt.xlabel('Cut')
plt.ylabel('Price')

在这里插入图片描述

#-------------------------(b)双数剧系列柱形图-------------------------------------------df=pd.read_csv('MultiColumn_Data.csv')
df=df.sort_values(by='1996', ascending=False)
print(df.head())x_label=np.array(df["Catergory"])
x=np.arange(len(x_label))
y1=np.array(df["1996"])
y2=np.array(df["1997"])fig=plt.figure(figsize=(5,5))
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)           #设置绘图区域大小位置plt.bar(x,y1,width=0.3,color='#00AFBB',label='1996',edgecolor='k', linewidth=0.25)                     #调整y1轴位置,颜色,label为图例名称,与下方legend结合使用
plt.bar(x+0.3,y2,width=0.3,color='#FC4E07',label='1997',edgecolor='k', linewidth=0.25)                 #调整y2轴位置,颜色,label为图例名称,与下方legend结合使用
plt.xticks(x+0.15,x_label,size=12)                                #设置x轴刻度,位置,大小plt.legend(loc=(1,0.5),ncol=1,frameon=False)    #显示图例,loc图例显示位置(可以用坐标方法显示),ncol图例显示几列,默认为1列,frameon设置图形边框plt.yticks(size=12)                                          #设置y轴刻度,位置,大小
plt.grid(axis="y",c=(217/256,217/256,217/256))        #设置网格线#将y轴网格线置于底层
#plt.xlabel("Quarter",labelpad=10,size=18,)                          #设置x轴标签,labelpad设置标签距离x轴的位置
#plt.ylabel("Amount",labelpad=10,size=18,)                                   #设置y轴标签,labelpad设置标签距离y轴的位置ax = plt.gca()                         #获取整个表格边框
ax.spines['top'].set_color('none')  # 设置上‘脊梁’为无色
ax.spines['right'].set_color('none')  # 设置右‘脊梁’为无色
ax.spines['left'].set_color('none')  # 设置左‘脊梁’为无色

在这里插入图片描述

#----------------------------------(c)堆积柱形图---------------------------------------------  
df=pd.read_csv('StackedColumn_Data.csv')
df=df.set_index("Clarity")
print(df.head())Sum_df=df.apply(lambda x: x.sum(), axis=0).sort_values(ascending=False)
df=df.loc[:,Sum_df.index]meanRow_df=df.apply(lambda x: x.mean(), axis=1)
Sing_df=meanRow_df.sort_values(ascending=False).indexn_row,n_col=df.shape
#x_label=np.array(df.columns)
x_value=np.arange(n_col)cmap=cm.get_cmap('YlOrRd_r',n_row)
color=[colors.rgb2hex(cmap(i)[:3]) for i in range(cmap.N) ]bottom_y=np.zeros(n_col)fig=plt.figure(figsize=(5,5))
#plt.subplots_adjust(left=0.1, right=0.9, top=0.7, bottom=0.1)for i in range(n_row):label=Sing_df[i]plt.bar(x_value,df.loc[label,:],bottom=bottom_y,width=0.5,color=color[i],label=label,edgecolor='k', linewidth=0.25)   bottom_y=bottom_y+df.loc[label,:].values        plt.xticks(x_value,df.columns,size=10)  #设置x轴刻度
#plt.tick_params(axis="x",width=5)plt.legend(loc=(1,0.3),ncol=1,frameon=False)plt.grid(axis="y",c=(166/256,166/256,166/256))ax = plt.gca()                         #获取整个表格边框
ax.spines['top'].set_color('none')  # 设置上‘脊梁’为无色
ax.spines['right'].set_color('none')  # 设置右‘脊梁’为无色
ax.spines['left'].set_color('none')  # 设置左‘脊梁’为无色

在这里插入图片描述

#---------------------------------(d) 百分比堆积柱形图------------------------------------------------
df=pd.read_csv('StackedColumn_Data.csv')
df=df.set_index("Clarity")
print(df.head())SumCol_df=df.apply(lambda x: x.sum(), axis=0)
df=df.apply(lambda x: x/SumCol_df, axis=1)meanRow_df=df.apply(lambda x: x.mean(), axis=1)
Per_df=df.loc[meanRow_df.idxmax(),:].sort_values(ascending=False)
Sing_df=meanRow_df.sort_values(ascending=False).indexdf=df.loc[:,Per_df.index]
n_row,n_col=df.shape
x_value=np.arange(n_col)cmap=cm.get_cmap('YlOrRd_r',n_row)
color=[colors.rgb2hex(cmap(i)[:3]) for i in range(cmap.N) ]bottom_y=np.zeros(n_col)fig=plt.figure(figsize=(5,5))
#plt.subplots_adjust(left=0.1, right=0.9, top=0.7, bottom=0.1)for i in range(n_row):label=Sing_df[i]plt.bar(x_value,df.loc[label,:],bottom=bottom_y,width=0.5,color=color[i],label=label,edgecolor='k', linewidth=0.25)   bottom_y=bottom_y+df.loc[label,:].values        plt.xticks(x_value,df.columns,size=10)  #设置x轴刻度
plt.gca().set_yticklabels(['{:.0f}%'.format(x*100) for x in plt.gca().get_yticks()]) plt.legend(loc=(1,0.3),ncol=1,frameon=False)plt.grid(axis="y",c=(166/256,166/256,166/256))ax = plt.gca()                         #获取整个表格边框
ax.spines['top'].set_color('none')  # 设置上‘脊梁’为无色
ax.spines['right'].set_color('none')  # 设置右‘脊梁’为无色
ax.spines['left'].set_color('none')  # 设置左‘脊梁’为无色

在这里插入图片描述

2、plotnine

import pandas as pd
import numpy as np
from plotnine import *
#from plotnine.data import *
#import matplotlib.pyplot as plt #-----------------------(a)单数剧系列柱形图-------------------------------------------- 
mydata=pd.DataFrame({'Cut':["Fair","Good","Very Good","Premium","Ideal"],'Price':[4300,3800,3950,4700,3500]})Sort_data=mydata.sort_values(by='Price', ascending=False)#Sort_data['Cut']=Sort_data['Cut'].astype("category",categories=Sort_data['Cut'],ordered=True)Sort_data['Cut']=pd.Categorical(Sort_data['Cut'],ordered=True, categories=Sort_data['Cut'])base_plot=(ggplot(Sort_data,aes('Cut','Price'))
+geom_bar(stat = "identity", width = 0.8,colour="black",size=0.25,fill="#FC4E07",alpha=1)  
+ylim(0, 6000)
+theme(axis_title=element_text(size=18,face="plain",color="black"),axis_text = element_text(size=16,face="plain",color="black"),aspect_ratio =1.15,figure_size = (6.5, 6.5),dpi = 50)
)
print(base_plot)
#base_plot.save('Bar_Plot.pdf')

在这里插入图片描述

#------------------------(b)双数剧系列柱形图---------------------------------------------  df=pd.read_csv('MultiColumn_Data.csv')
df=df.sort_values(by='1996', ascending=False)
mydata=pd.melt(df, id_vars='Catergory')mydata['Catergory']=pd.Categorical(mydata['Catergory'],ordered=True, categories=df['Catergory'])base_plot=(ggplot(mydata,aes(x='Catergory',y='value',fill='variable'))
+geom_bar(stat="identity", color="black", position='dodge',width=0.7,size=0.25)
+scale_fill_manual(values=["#00AFBB", "#FC4E07", "#E7B800"])
+ylim(0, 10)
+theme(legend_title=element_text(size=18,face="plain",color="black"),legend_text=element_text(size=16,face="plain",color="black"),axis_title=element_text(size=18,face="plain",color="black"),axis_text = element_text(size=16,face="plain",color="black"),legend_background=element_blank(),legend_position=(0.75,0.80),aspect_ratio =1.15,figure_size = (6.5, 6.5),dpi = 50)
)
print(base_plot)
#base_plot.save('Bar_Plot2.pdf')

在这里插入图片描述

#------------------------(c)堆积柱形图---------------------------------------------  
df=pd.read_csv('StackedColumn_Data.csv')Sum_df=df.iloc[:,1:].apply(lambda x: x.sum(), axis=0).sort_values(ascending=False)meanRow_df=df.iloc[:,1:].apply(lambda x: x.mean(), axis=1)Sing_df=df['Clarity'][meanRow_df.sort_values(ascending=True).index]mydata=pd.melt(df,id_vars='Clarity')from pandas.api.types import CategoricalDtype
mydata['variable']=mydata['variable'].astype("category",CategoricalDtype(categories= Sum_df.index,ordered=True))
mydata['Clarity']=mydata['Clarity'].astype("category",CategoricalDtype(categories= Sing_df,ordered=True))base_plot=(ggplot(mydata,aes(x='variable',y='value',fill='Clarity'))
+geom_bar(stat="identity", color="black", position='stack',width=0.7,size=0.25)
+scale_fill_brewer(palette="YlOrRd")
+ylim(0, 15000)
+theme(legend_title=element_text(size=18,face="plain",color="black"),legend_text=element_text(size=16,face="plain",color="black"),axis_title=element_text(size=18,face="plain",color="black"),axis_text = element_text(size=16,face="plain",color="black"),legend_background=element_blank(),legend_position=(0.75,0.75),aspect_ratio =1.15,figure_size = (6.5, 6.5),dpi = 50)
)
print(base_plot)
#base_plot.save('Bar_Plot3.pdf')

在这里插入图片描述

#---------------------------------(d)百分比堆积柱形图------------------------------------------------
df=pd.read_csv('StackedColumn_Data.csv')SumCol_df=df.iloc[:,1:].apply(lambda x: x.sum(), axis=0)df.iloc[:,1:]=df.iloc[:,1:].apply(lambda x: x/SumCol_df, axis=1)meanRow_df=df.iloc[:,1:].apply(lambda x: x.mean(), axis=1)Per_df=df.iloc[meanRow_df.idxmax(),1:].sort_values(ascending=False)Sing_df=df['Clarity'][meanRow_df.sort_values(ascending=True).index]from pandas.api.types import CategoricalDtype
mydata=pd.melt(df,id_vars='Clarity')
mydata['Clarity']=mydata['Clarity'].astype("category",CategoricalDtype(categories=Sing_df,ordered=True))
mydata['variable']=mydata['variable'].astype("category",CategoricalDtype(categories= Per_df.index,ordered=True))base_plot=(ggplot(mydata,aes(x='variable',y='value',fill='Clarity'))
+geom_bar(stat="identity", color="black", position='fill',width=0.7,size=0.25)
+scale_fill_brewer(palette="GnBu")
#+ylim(0, 10)
+theme(#text=element_text(size=15,face="plain",color="black"),legend_title=element_text(size=18,face="plain",color="black"),legend_text=element_text(size=16,face="plain",color="black"),axis_title=element_text(size=18,face="plain",color="black"),axis_text = element_text(size=16,face="plain",color="black"),aspect_ratio =1.15,figure_size = (6.5, 6.5),dpi = 50)
)
print(base_plot)
#base_plot.save('Bar_Plot4.pdf')

在这里插入图片描述

这篇关于python绘制柱形图系列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/689621

相关文章

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

Python xmltodict实现简化XML数据处理

《Pythonxmltodict实现简化XML数据处理》Python社区为提供了xmltodict库,它专为简化XML与Python数据结构的转换而设计,本文主要来为大家介绍一下如何使用xmltod... 目录一、引言二、XMLtodict介绍设计理念适用场景三、功能参数与属性1、parse函数2、unpa

Python中使用defaultdict和Counter的方法

《Python中使用defaultdict和Counter的方法》本文深入探讨了Python中的两个强大工具——defaultdict和Counter,并详细介绍了它们的工作原理、应用场景以及在实际编... 目录引言defaultdict的深入应用什么是defaultdictdefaultdict的工作原理

Python中@classmethod和@staticmethod的区别

《Python中@classmethod和@staticmethod的区别》本文主要介绍了Python中@classmethod和@staticmethod的区别,文中通过示例代码介绍的非常详细,对大... 目录1.@classmethod2.@staticmethod3.例子1.@classmethod

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写