matplotlib 柱状图_Matplotlib(一)——柱状图

Matplotlib——柱状图

条形图包括单数据系列柱状图、多数据系列柱状图、堆积柱状图、百分比柱状图

一、matplotlib

1、简介

Matplotlib 是什么?

Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。

为什么选择 Matplotlib?
  • 1、Matplotlib 是一个非常强大的 Python 画图工具;
  • 2、手中有很多数据, 可是不知道该怎么呈现这些数据。
Matplotlib 能帮你?

绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、、甚至是图形动画等等。

2、模块的安装

pip3 install matplotlib
pip3 install pandas
pip3 install numpy

3、单数据系列柱状图

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')

248ad5001942b6e0151a938ad32f8fec.png

4、多数据系列柱状图

###模块的导入
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("MultiColumn_Data.csv")   ### 导入文件
df   ### 查看文件
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 = '1996', 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.title("title",size=18)   ###设置标题
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')   ###设置左‘脊梁’为无色

b0b7522c5c9bb77f83a4391838309f97.png

5、堆积柱状图

###模块的导入
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import cm,colors

df = pd.read_csv("StackedColumn_Data.csv")
df = df.set_index("Clarity")
Sum_df = df.apply(lambda x:x.sum(), axis=0).sort_values(ascending=False)
df = df.loc[:,Sum_df.index]
mead_Row_df = df.apply(lambda x:x.mean(),axis=1)
Sing_df = mead_Row_df.sort_values(ascending=False).index
n_row,n_col = df.shape
x_value = np.arange(n_col)
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))
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))

54e82f8266eb46875c4127e1c1fdb2bd.png

6、百分比堆积柱形图

###模块的导入
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import cm,colors

df=pd.read_csv('StackedColumn_Data.csv')
df=df.set_index("Clarity")
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).index
df=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')  # 设置左‘脊梁’为无色

79b614ea0222baa37132b7e8c9a1e20a.png

END

留言板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值