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

留言板

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页