#棒棒图和包点图
#除了长相不一样,本质和条形图一摸一样
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#导入数据
df_raw=pd.read_csv('mpg_ggplot2.csv')
df=df_raw[['cty','manufacturer']].groupby('manufacturer').apply(lambda x:x.mean())
df.sort_values('cty',inplace=True)
df.reset_index(inplace=True)
#绘图#
fig,ax =plt.subplots(figsize=(16,10),facecolor='white',dpi=80)
#画柱子
ax.vlines(x=df.index,ymin=0,ymax=df.cty,color='firebrick',alpha=0.7,linewidth=2);
#画散点图
ax.scatter(x=df.index,y=df.cty+0.3,s=175,color='firebrick',alpha=0.7)
#设置横总坐标的标题
ax.set_title('城市里程数的棒棒图',fontdict={'size':22})#font字体
ax.set(ylabel='城市里程/加仑',ylim=(0,30))
ax.set_ylabel('城市里程/加仑',fontdict={'size':16})
ax.set_xticks(df.index)
ax.set_xticklabels(df.manufacturer.str.upper()
#显示在横坐标上的位置,
,rotation=60
,horizontalalignment='right'
,fontsize=12);
#为某一个坐标设置注释
for i,cty in enumerate(df.cty):
ax.text(i,cty+1#注释所有的横纵坐标
,round(cty,1) #b保留一位小数
, horizontalalignment='center'#相对于我们规定的x和y坐标,文字显示在什么地方
)
####棒棒图
df_raw=pd.read_csv('mpg_ggplot2.csv')
df=df_raw[['cty','manufacturer']].groupby('manufacturer').apply(lambda x:x.mean())
df.sort_values('cty',inplace=True)
df.reset_index(inplace=True)
###绘制包点图
fig,ax =plt.subplots(figsize=(16,10),facecolor='white',dpi=80)
###绘制横线(而不是竖线)的函数hlines
ax.hlines( y=df.index,
xmin=11, #为了让虚线布满屏幕,所以从城市里程最小值的一些地方开始
xmax=26, #最大值的一些高的地方开始
color='gray',alpha=0.7,linewidth=1,linestyle='dashdot')
#画散点图
ax.scatter(y=df.index,x=df.cty+0.3,s=75,color='firebrick',alpha=0.7)
plt.show()
###绘制包点图
fig,ax =plt.subplots(figsize=(16,10),facecolor='white',dpi=80)
###绘制横线(而不是竖线)的函数hlines
ax.hlines( y=df.index,
xmin=11, #为了让虚线布满屏幕,所以从城市里程最小值的一些地方开始
xmax=26, #最大值的一些高的地方开始
color='gray',alpha=0.7,linewidth=1,linestyle='dashdot')
#画散点图
ax.scatter(y=df.index,x=df.cty+0.3,s=75,color='firebrick',alpha=0.7)
#装饰图像
ax.set_title('城市里程数的棒棒图',fontdict={'size':22})#font字体
ax.set(ylabel='城市里程/加仑')
ax.set_ylabel('城市里程/加仑',fontdict={'size':16})
ax.set_yticks(df.index)
ax.set_yticklabels(df.manufacturer.str.title(),fontdict={'horizontalalignment':'right','size':20});
ax.set_xlim(10,27)
plt.show()