数据都是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版权协议,转载请附上原文出处链接和本声明。