seaborn画各种典型图的代码备忘录(1)——dataframe数据画双Y坐标轴柱状图

数据都是dataframe格式,双坐标轴:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns


# train数据为房价数据
#构造画图需要的数据

price_number = pd.DataFrame(np.zeros((11,2)),columns=["均价","数量"],index=["天河","荔湾","越秀","黄埔","海珠","白云","番禺","南沙","增城","花都","从化"])
for region in ["天河","荔湾","越秀","黄埔","海珠","白云","番禺","南沙","增城","花都","从化"]:
    price_number.loc[region,"均价"] = train[train["所在区域"]==region]["总价(万元)"].mean()
    price_number.loc[region,"数量"] = len(train[train["所在区域"]==region])
# 把需要做图的数据写在dataframe price_number中,然后下面的代码基本不需要改变    


在这里插入图片描述

fig, ax1 = plt.subplots()

# 柱形的宽度
width = 0.4

# 柱形的间隔
x1_list = []
x2_list = []
for i in range(len(price_number)):
    x1_list.append(i)
    x2_list.append(i + width)

# 绘制柱形图1
b1 = ax1.bar(x1_list, price_number['均价'],width=width,label='均价',color = sns.xkcd_rgb["pale red"],tick_label = price_number.index)

# 绘制柱形图2---双Y轴
ax2 = ax1.twinx()
b2 = ax2.bar(x2_list, price_number['数量'],width=width,label='数量',color = sns.xkcd_rgb["denim blue"],tick_label = price_number.index)

# 坐标轴标签设置
#ax1.set_title('',fontsize = 14)
ax1.set_xlabel('所在区域',fontsize=12)
ax1.set_ylabel('均价(万元)',fontsize=12)
ax2.set_ylabel('样本数',fontsize=12)

# x轴标签旋转
#ax1.set_xticklabels(ax1.get_xticklabels(),rotation = 25)

# 双Y轴标签颜色设置
ax1.yaxis.label.set_color(b1[0].get_facecolor())
ax2.yaxis.label.set_color(b2[0].get_facecolor())

# 双Y轴刻度颜色设置
ax1.tick_params(axis = 'y', colors = b1[0].get_facecolor())
ax2.tick_params(axis = 'y', colors = b2[0].get_facecolor())

# 图例设置
plt.legend(handles = [b1,b2])

# 网格设置
plt.grid('off')
plt.savefig('区域-价格改进图.png', dpi=200,bbox_inches = 'tight')#指定分辨率


在这里插入图片描述


版权声明:本文为weixin_42749944原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。